matplotlib的手动图例,使用plot和fill_between的混合

时间:2017-07-18 22:05:08

标签: python matplotlib

我正在使用matplotlib绘制适合数据的模型的结果。我用彩色线绘制模型结果,然后使用fill_between绘制数据,以便显示错误带。我希望我的图例显示灰色错误带灰色实线,即使图中的曲线和波段以不同颜色绘制。

我知道如何使用ax.add_artistmatplotlib.lines的组合来完成独立定义的图例,但我不知道如何使用此技巧添加错误带。

import numpy as np 
from matplotlib.pylab import plt
from matplotlib import lines as mlines

x = np.linspace(0, 1, 100)
y = x + 1
ylow, yhigh = 0.9*np.exp(x), 1.1*np.exp(x)

fig, ax = plt.subplots(1, 1)
curve1 = ax.plot(x, y, color='red')
band1 = ax.fill_between(x, ylow, yhigh, color='blue')

solid_line = mlines.Line2D([], [], ls='-', c='gray', label='gray-colored label for line')
band = mlines.Line2D([], [], ls='-', c='gray', label='(incorrect) gray-colored label for band')
first_legend = plt.legend(handles=[solid_line, band], loc=2)
ax.add_artist(first_legend)

问题:如何让我的图例显示band1的灰色条带和curve1的灰色线条?

figure draft

1 个答案:

答案 0 :(得分:2)

您不必为传奇绘制新线条。您可以(也可能应该)使用带标签的情节。以这种方式创建图例后,您可以更改legendHandles的颜色。我希望这就是你想要的:

import numpy as np 
from matplotlib.pylab import plt
from matplotlib import lines as mlines

x = np.linspace(0, 1, 100)
y = x + 1
ylow, yhigh = 0.9*np.exp(x), 1.1*np.exp(x)

fig, ax = plt.subplots(1, 1)
curve1 = ax.plot(x, y, color='red', label='gray-colored label for line')
band1 = ax.fill_between(x, ylow, yhigh, color='blue', label='(incorrect) gray-colored label for band')

leg = ax.legend(loc=2)
leg.legendHandles[0].set_color('gray')
leg.legendHandles[1].set_color('gray')
plt.show()

enter image description here