假设我正在制作一个有五个项目的图,并且只有空间创建一个有三列的图例(比这更多的列太宽了),例如。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
for i in range(5):
ax.plot(np.arange(10), np.random.rand(10), label='Item #%d' % i)
ax.legend(ncol=3)
最后一行的两个条目是左对齐的,在右边留下了一个很大的空白,这不是很美观。当你必须标记大量的行时,这就变得特别有问题。
有没有办法将未填充行中的条目居中?
1条答案
按热度按时间zfciruhq1#
matplotlib图例是基于列的。您不能让图例条目跨越多个列。也就是说,当然可以在奇数行的图例中“居中”奇数个条目,同样也可以在偶数行的图例中“居中”偶数个条目。这可以通过在外部位置使用空的艺术家来完成。
如果列数为奇数,图例条目数为偶数,或者相反,则无法执行上述操作。可以选择使用两个不同的图例,并将它们放置在彼此的下方,这样看起来最后一行的条目居中。
这里的缺点是图例没有边框,两个图例都需要单独定位。为了克服这个问题,需要深入挖掘并使用图例的一些私有属性(注意,这些属性可能会在不通知的情况下随版本而变化)。
然后,可以在创建后删除第二个图例,并将其
_legend_handle_box
放置到第一个图例中。