有没有一种方法可以使图例沿水平方向(从左到右)而不是垂直方向运行,而无需指定列数(ncol=...)?

我正在绘制不同数量的线(大约5至15条),而我宁愿不尝试动态计算最佳列数(即,当标签贴满整个图而不会跑掉的列数)有所不同)。同样,当一行以上时,条目的顺序从上到下,然后从左到右;从左到右,从左到右。如果可以默认为水平,则也可以缓解这种情况。

相关:Matplotlib legend, add items across columns instead of down

最佳答案

似乎此时matplotlib默认为垂直布局。虽然不理想,但一种选择是将行数设为2,作为一种解决方法:

import math
import numpy as np

npoints = 1000


xs = [np.random.randn(npoints) for i in 10]
ys = [np.random.randn(npoints) for i in 10]

for x, y in zip(xs, ys):
    ax.scatter(x, y)

nlines = len(xs)
ncol = int(math.ceil(nlines/2.))
plt.legend(ncol=ncol)

因此,在这里,您将获取要绘制的行数的长度(通过nlines = len(xs)),然后通过ncol = int(math.ceil(nlines/2.))将其转换为许多列,并将其发送到plt.legend(ncol=ncol)

关于python - matplotlib图例先水平排列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21038934/

10-11 16:31