Matplotlib:相同数字的多个传说

时间:2014-08-12 19:38:33

标签: python matplotlib plot legend

我有一些绘图函数,每个函数都接收不同类型的数据并绘制它们,并带有自己的标题和图例。但是,当我尝试在同一个图上绘制它们时,前一个被覆盖。

我知道这样做的一种方法是调用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)

我不确定这是否是最好的方法,但由于我多次使用这些绘图模型,我觉得我必须将它们保存在函数形式中。

1 个答案:

答案 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)

正如此处所示:matplotlib: 2 different legends on same graph