![](/img/trans.png)
[英]Create legend click events on multiple matplotlib.pyplot subplots
[英]matplotlib (python) - create single custom legend for multiple plots WITHOUT pyplot
我想在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.)
如果我将ax.legend更改为:fig.legend(handles = [blue_line,green_line]),则python会产生错误:
TypeError:legend()至少接受3个参数(给定2个)
(我猜是因为没有引用线点)
感谢您提供的任何帮助-我已经看了一个星期了!
您收到的错误是因为Figure.legend
要求您将handles
和labels
都传递给它。
从文档:
图例(句柄,标签,* args,** kwargs)
在图中放置图例。
labels
是字符串序列,handles
是Line2D
或Patch
实例序列。
以下作品:
# 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.