我创建了一个n x n matplot子图矩阵,它包含相同类型的曲线(让我们将它们命名为signal1和signal2):
n=5
f, axarr = plt.subplots(n,n)
for i,signal_generator in enumerate(signal_generators):
y=i%n
x=(i-y)/n
axarr[x, y].plot(signal_generator.signal1)
axarr[x, y].plot(signal_generator.signal2)
由于每个子图中的2个信号各自代表相同的类型,我想使用带有两个条目的数字全局图例' signal1' ' signal2'而不是将相同的图例附加到每个子图。
我该怎么做?
答案 0 :(得分:6)
一种方法是在地块下方施加一些额外的空间。然后你可以在那里适应传奇,并拥有一个"全球"图例
import matplotlib.pyplot as plt
import numpy as np
plt.close('all')
fig, axlist = plt.subplots(3, 3)
for ax in axlist.flatten():
line1, = ax.plot(np.random.random(100), label='data1')
line2, = ax.plot(np.random.random(100), label='data2')
line3, = ax.plot(np.random.random(100), 'o', label='data3')
fig.subplots_adjust(top=0.9, left=0.1, right=0.9, bottom=0.12) # create some space below the plots by increasing the bottom-value
axlist.flatten()[-2].legend(loc='upper center', bbox_to_anchor=(0.5, -0.12), ncol=3)
# it would of course be better with a nicer handle to the middle-bottom axis object, but since I know it is the second last one in my 3 x 3 grid...
fig.show()
现在,在第二个最后一个(底部中间)轴区域下面会有一个标签,这要归功于bbox_to_anchor=(x, y)
具有负y值。根据您拥有的不同子图的数量,以及您在每个子图中绘制的线的数量,最好保持对不同线对象的正确跟踪。也许可以将它们附加到列表中。
对我来说,输出数字看起来像是
这会让你想要你想要的吗?