我需要用fill_between(无堆叠)重新创建一个简单的堆叠图,网格线呈现看起来不一样,我不知道如何让它们看起来一样,代码如下:
import pandas as pd
import numpy as np
mpl.rcParams.update(mpl.rcParamsDefault)
plt.style.use("ggplot")
_styles = {
'axes.edgecolor': '#bcbcbc',
'axes.facecolor': 'white',
'grid.color': '#b2b2b2',
'grid.linestyle': '--',
}
plt.rcParams.update(_styles)
def plot_a_plot(x_axis, actual, predicted, size=(10,4)):
plt.figure(figsize=size)
p1 = plt.plot(x_axis, actual, alpha=0.5, label=actual.name, lw=0.5)
plt.fill_between(x_axis, actual.astype(np.float64), color='#F0A498', alpha=1, zorder=1)
p2 = plt.plot(x_axis, predicted, alpha=0.5, label=predicted.name, lw=0.5)
plt.fill_between(x_axis, predicted.astype(np.float64), color='C1', alpha=0.5, zorder=0)
plt.grid(True, zorder=10)
plt.title('Plot with fill_between')
plt.show()
def plot_a_stackplot(x_axis, actual, predicted, size=(10,4)):
y = np.vstack([actual.astype(float), predicted.astype(float)])
plt.figure(figsize=size)
plt.stackplot(x_axis, y, labels=[actual.name, predicted.name], alpha=0.5, edgecolors="face")
plt.title('Stackplot')
plt.show()
arr = np.random.rand(10)
data = {
"actual": arr,
"predicted": arr*2
}
df = pd.DataFrame(data)
x_axis = df.index
actual = df['actual']
predicted = df['predicted']
plot_a_plot(x_axis, actual, predicted)
plot_a_stackplot(x_axis, actual, predicted)
View example here
改变zorder似乎没有任何效果,我也玩过alpha水平等等--似乎什么都不起作用。堆栈图上的网格线看起来就是它应该看的样子,简单图上的网格线看起来很模糊。
2条答案
按热度按时间isr3a4wc1#
zorder
似乎不能很好地与值0
配合使用,在这个demo中,它总是被选择为〉=1。如果您将函数更改为:
编辑:如果你想让底部区域(红色)看起来和stackplot一样,你应该使用正确的颜色。你可以用以下方法找到颜色:
第一个是你要找的:
#E24A33
(C0
也可以)从这里开始,对
fill_between
的第二次调用应该填充actual
和predicted
之间的区域,否则填充区域将重叠:dfty9e192#
尝试以下操作(在本例中我没有添加标签):
这基本上就是
stackplot
正在做的事情(尽管它显然绘制了累积的“顶部”和“底部”)。