【发布时间】:2014-10-06 00:26:59
【问题描述】:
我有几个绘图函数,每个函数都接收不同类型的数据并绘制它们,并带有自己的标题和图例。但是,当我尝试将它们绘制在同一个图形上时,前者会被覆盖。
我知道这样做的一种方法是调用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)
我不确定这是否是最好的方法,但由于我多次使用这些绘图模型,我觉得我必须将它们保持在函数形式中。
评论注释:
-
matplotlib: 2 different legends on same graph 是我提到
get_artist的原因,在那个线程中提到了。我现在实际上已经使用它解决了它,但我正在为这种特殊情况寻找一种更清洁的方法。我现在所做的是从每个函数返回一个legend并执行该线程中的建议。
【问题讨论】:
标签: python matplotlib plot legend