我有一些绘图函数,每个函数都接收不同类型的数据并绘制它们,并带有自己的标题和图例。但是,当我尝试在同一个图上绘制它们时,前一个被覆盖。
我知道这样做的一种方法是调用get_artist()
,但是由于传说是在函数内部创建的,所以这似乎不可能。是否有任何类型的LegendHandler
来执行此操作?要从每个图中检索图例并在图上显示它们?我应该从每个函数返回图例吗?
以下是我所拥有的简化代码:
def plot_1(fig, data, ax = None):
if ax = None:
ax = fig.add_subplot(111)
ax.plot(data)
ax.set_xlabel('t')
plt.axis('tight')
# Create a legend
colors = {'A':'blue',
'B':'yellow',
'C':'red'}
legend_labels = []
legend_handles = []
for key in colors.keys():
legend_labels.append(key)
p = matplotlib.patches.Rectangle((0, 0), 1, 1, fc = colors[key], alpha = 0.5)
legend_handles.append(p)
ax.legend(legend_handles, legend_labels, loc='center left', bbox_to_anchor=(1, 0.5))
def plot_2(fig, data, ax = None):
if ax = None:
ax = fig.add_subplot(111)
ax.plot(data, color='green', linewidth=1, label='L1')
ax.set_xlabel('t')
ax.autoscale()
ax.legend()
def main():
plot_1(fig, data = data1)
plot_2(fig, data = data2)
我不确定这是否是最好的方法,但由于我多次使用这些绘图模型,我觉得我必须将它们保存在函数形式中。
答案 0 :(得分:0)
让你的函数返回图例
def plot_2(fig, data, ax = None):
....
return ax.legend()
然后你可以做
legend1 = plot_1(fig, data = data1)
plot_2(fig, data = data2)
pyplot.gca().add_artist(legend1)