当前位置: 首页 > 知识库问答 >
问题:

Matplotlib:同一图形上的多个图例

阎晋
2023-03-14

我有几个绘图函数,每个函数都接收不同类型的数据并用自己的标题和图例进行绘图。然而,当我试图在同一个图形上绘制它们时,前一个图形被覆盖。

我知道这样做的一种方法是调用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个不同的图例在同一个图表上,这就是我提到的get\u artist,这是在该线程中提到的原因。我现在已经用它解决了这个问题,但我一直在为这个特殊的案例寻找一种更干净的方法。我现在所做的是从每个函数返回一个图例,并执行该线程中建议的操作

共有1个答案

张俊茂
2023-03-14

让你的功能回归传奇

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:同一图形上的两个不同的图例

 类似资料:
  • 我正在绘图中绘制多个多边形: 结果图正确地显示了我的多边形,但我想知道哪个多边形对应于图上的哪个索引(例如:绿色多边形是处的多边形)。理想情况下,我想要一个将多边形的颜色与其索引关联起来的图例,但我不知道如何在这样的循环中添加这样的图例。我试过但这不起作用。 多边形的数量是可变的,所以严格分配颜色是不可能的。 如何添加图例?

  • 使用matplotlib时,我可以使用{importmatplotlib.pyplotas plt}因为我使用Tkinter,所以我也会使用PicreCanvasTkAgg来做同样的事情 有人能帮我在如何实现matplotlib的停顿效果在菲格勒CanvasTkAgg。

  • 问题内容: 我是python的新手,正在尝试使用matplotlib在同一图中绘制多条线。我的Y轴的值存储在字典中,并在下面的代码中在X轴中进行相应的值 我的代码是这样的: 但是我得到的是一个单独的图,一个图一个图。有人可以帮助我弄清楚我们的代码有什么问题吗?为什么不能生成多条线图?非常感谢! 问题答案: 这很简单: 您可以随意添加多次。至于,您需要首先指定颜色。所以对于蓝色,它是。对于正常的线是

  • 本文向大家介绍matplotlib 同一图中的多条线/曲线,包括了matplotlib 同一图中的多条线/曲线的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 我有这个数据库存储传感器采集数据, 采集(acq)来自不同控制单元(cu)的固定间隔(日期时间) 每个采集在数据表中存储了许多不同的度量 我需要这种观点: 作为: v1是data.value(例如湿度),其中 acq.id_cu = 1 AND data.id_meas = 100 v2是data.value(例如计数器),其中 acq.id_cu = 2 AND data.id_me

  • 我试图使用jFreechart生成两个图,每个图有12个图(在jFreechart中称为系列)。然而,有些图表被简单地跳过了!我知道我在这里有同步问题,并试图使用用户@trashgod在这里提供的方法,但我失败了。我知道我使用摇摆工人的方式是错误的!我不知道怎么修好它 每个图形应该包含10个平行的水平直线的图形。正如你在所附的图像中看到的,一些线条丢失了。这两个数字也必须相同(事实并非如此)。在实