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

matplotlib(python)-为多个图创建一个自定义图例,而无需pyplot

刘浩思
2023-03-14

我想在pyqt GUI中为matplotlib(python)中的多个绘图创建一个自定义图例。(pyqt建议不要使用pyplot,因此必须使用面向对象的方法)。

网格中将显示多个绘图,但用户可以定义要显示的绘图数量。我希望图例显示在所有绘图的右侧,因此我不能简单地为最后绘制的轴创建图例。我希望为整个图形创建图例,而不仅仅是最后一个轴(类似于pyplot中的plt.figlegend)。

在我在别处看到的示例中,这需要引用绘制的线。同样,我不能这样做,因为用户可以选择在图形上显示哪些线,我希望图例总是显示所有可能的线,无论它们当前是否显示。

(注意下面的示例代码使用pyplot,但我的最终版本不能)

import matplotlib.pyplot as plt
import matplotlib.lines as mlines
import numpy as np

fig = plt.figure()

# Create plots in 2x2 grid
for plot in range(4):
    # Create plots
    x = np.arange(0, 10, 0.1)
    y = np.random.randn(len(x))
    y2 = np.random.randn(len(x))
    ax = fig.add_subplot(2,2,plot+1)
    plt.plot(x, y, label="y")
    plt.plot(x, y2, label="y2")

# Create custom legend
blue_line = mlines.Line2D([], [], color='blue',markersize=15, label='Blue line')
green_line = mlines.Line2D([], [], color='green', markersize=15, label='Green line')
ax.legend(handles=[blue_line,green_line],bbox_to_anchor=(1.05, 0),  loc='lower left', borderaxespad=0.)

如果我换斧头。图例到:fig.legend(句柄=[蓝色线,绿色线]),然后python生成错误:

TypeError:legend()至少接受3个参数(给定2个)

(我猜是因为直线点没有被引用)

谢谢你提供的任何帮助-我已经看了一个星期了!

共有1个答案

陶成化
2023-03-14

您得到的错误是因为图。图例要求您同时传递句柄和标签。

从文档中:

图例(手柄、标签、*args、**kwargs)

在图中放置图例。标签是一个字符串序列,句柄是一个Line2DPatch实例序列。

以下作品:

# Create custom legend
blue_line = mlines.Line2D([], [], color='blue',markersize=15, label='Blue line')
green_line = mlines.Line2D([], [], color='green', markersize=15, label='Green line')

handles = [blue_line,green_line]
labels = [h.get_label() for h in handles] 

fig.legend(handles=handles, labels=labels)  

 类似资料:
  • 我目前使用matplotlib以以下方式生成图例: 这在某种程度上是可行的,见1。但我在我的传奇中复制了信息。 我宁愿把传说分开。所以我有不同颜色的线对应于时间t,一条法线作为我的解析解,一个点作为我的模拟结果。 诸如此类 --(红线)t=25 --(蓝线)t=50 --(绿线)t=500 模拟 --解析解 现在有人知道我如何用matplotlib实现这一点了吗?

  • 我有几个绘图函数,每个函数都接收不同类型的数据并用自己的标题和图例进行绘图。然而,当我试图在同一个图形上绘制它们时,前一个图形被覆盖。 我知道这样做的一种方法是调用,但是由于图例是在函数内部创建的,所以这似乎是不可能的。是否有任何类型的可以执行此操作?从每个绘图中检索图例并在图形上显示它们?我应该从每个函数返回图例吗? 这是我所拥有的简化代码: 我不确定这是否是最好的方法,但由于我多次使用这些绘图

  • 本文向大家介绍自定义matplotlib图,包括了自定义matplotlib图的使用技巧和注意事项,需要的朋友参考一下 示例

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

  • 我正在使用helm charts创建部署微服务,通过执行helm create创建包含部署、服务和入口的基本图表,但我没有其他配置,如水平pod自动缩放器、pod中断预算。

  • 问题内容: 我需要为同一张图片启动多个容器。如果我如下所示创建我的撰写文件,它可以正常工作。 我有什么简单的方法可以提及撰写实例的数量,而不是多次复制和粘贴? 问题答案: 更新的答案(2017年10月) 正如其他人提到的那样,docker API已更改。我正在更新我的答案,因为这是大多数人可能会看到的答案。 不幸的是,我们目前无法在docker-compose.yml文件中指定此版本(从3.5版开