如何在matplotlib中的子图下面添加图例? [英] How to add legend below subplots in matplotlib?
问题描述
我正在尝试在3列子图图形下添加图例.
I am trying to add a legend below a 3-column subplot figure.
我尝试了以下操作:
fig, ax = plt.subplots(ncols=3)
ax[0].plot(data1)
ax[1].plot(data2)
ax[2].plot(data3)
ax_sub = plt.subplot(111)
box = ax_sub.get_position()
ax_sub.set_position([box.x0, box.y0 + box.height * 0.1,box.width, box.height * 0.9])
ax_sub.legend(['A', 'B', 'C'],loc='upper center', bbox_to_anchor=(0.5, -0.3),fancybox=False, shadow=False, ncol=3)
plt.show()
但是,这只会创建一个空框架.当我注释掉ax_sub部分时,我的子图显示很好(但没有图例...)...
However, this creates just one empty frame. When I comment out the ax_sub part, my subplots show up nice (but without a legend...)...
非常感谢!
推荐答案
图例需要知道其应显示的内容.默认情况下,它将从创建艺术家的轴中获取带标签的艺术家.由于此处的轴ax_sub
为空,因此图例也将为空.
The legend needs to know what it should show. By default it will take the labeled artist from the axes it is created in. Since here the axes ax_sub
is empty, the legend will be empty as well.
使用ax_sub
可能没有任何意义.我们可以改用中轴(ax[1]
)放置图例.但是,我们仍然需要所有应该出现在图例中的艺术家.对于行来说,这很容易;可以提供一行行作为handles
参数的句柄.
The use of the ax_sub
may anyways not make too much sense. We could instead use the middle axes (ax[1]
) to place the legend. However, we still need all artists that should appear in the legend. For lines this is easy; one would supply a list of lines as handles to the handles
argument.
import matplotlib.pyplot as plt
import numpy as np
data1,data2,data3 = np.random.randn(3,12)
fig, ax = plt.subplots(ncols=3)
l1, = ax[0].plot(data1)
l2, = ax[1].plot(data2)
l3, = ax[2].plot(data3)
fig.subplots_adjust(bottom=0.3, wspace=0.33)
ax[1].legend(handles = [l1,l2,l3] , labels=['A', 'B', 'C'],loc='upper center',
bbox_to_anchor=(0.5, -0.2),fancybox=False, shadow=False, ncol=3)
plt.show()
这篇关于如何在matplotlib中的子图下面添加图例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!