Skip to main content
 首页 » 编程设计

python之所有子图的全局图例

2025年05月04日9zengkefu

我创建了一个包含相同类型曲线的 matplot 子图的 n x n 矩阵(我们将它们命名为 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”的图形全局图例,而不是将相同的图例附加到每个子图中。

我该怎么做?

请您参考如下方法:

一种方法是在地 block 下方强制留出一些额外空间。然后您可以将图例放在那里并拥有一个“全局”图例。

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 值,现在倒数第二个(中下)轴区域下方将有一个标签。根据您有多少不同的子图,以及您在每个子图中绘制了多少条不同的线,最好正确跟踪不同的线对象。也许将它们附加到列表中。

对我来说,输出图看起来像

这能满足您的需求吗?