默认情况下,Matplotlib按列对图例中的条目进行排序,例如:
In [48]: from matplotlib.pyplot import subplots, show
...: f, ax = subplots(figsize=(6, 2), constrained_layout=True)
...: for i in range(1, 10):
...: ax.plot((0,1),(0,1), label=str(i))
...: ax.legend(ncol=4, loc=3)
...: show()
但我更喜欢按行列出条目,例如
我可以重新排序句柄和标签,并调用ax.legend
传递重新排序的列表(如果在注解中要求,我会将其作为答案发布),但 * 我想知道是否有更直接和直接的方法来指示Matplotlib按照我想要的那样做 *,这样我就不必在我将要编写的50%的Matplotlib脚本中复制和粘贴重新排序解决方案...
1条答案
按热度按时间5f0d552i1#
可以使用Axes方法
get_legend_handles_labels
获取艺术家和标签的句柄列表,然后调用legend
传递重新排序的列表。为了对列表重新排序,我们观察到
legend
将列表中的第一个元素放置在第一列中,然后继续处理后面的列/项,ncol
),此外,在每列中,项之间的增量必须等于ncol
。也就是说,可以使用分片为每个列生成一个子列表,列的长度自动为正确的长度......,并最终使用
sum
将子列表连接到重新排序的子列表中。