我正在使用matplotlib绘制适合数据的模型的结果。我用彩色线绘制模型结果,然后使用fill_between
绘制数据,以便显示错误带。我希望我的图例显示灰色错误带和灰色实线,即使图中的曲线和波段以不同颜色绘制。
我知道如何使用ax.add_artist
和matplotlib.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
的灰色线条?
答案 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()