python - 设置图例的最大行数

标签 python matplotlib

我需要在一个图中绘制多个数据集。数据集的数量各不相同,所以我事先不知道会有多少。

如果我只是绘制图例,我会得到这个(下面的 MCVE):

enter image description here

我如何告诉 plt.legend() 只绘制前 10 个图例?我环顾了 plt.legends()类,但似乎没有理由设置这样的值。

MCVE:

import numpy as np
import matplotlib.pyplot as plt

dataset = []
for _ in range(20):
    dataset.append(np.random.uniform(0, 1, 2))

lbl = ['adfg', 'dfgb', 'cgfg', 'rtbd', 'etryt', 'frty', 'jklg', 'jklh',
       'ijkl', 'dfgj', 'kbnm', 'bnmbl', 'qweqw', 'fghfn', 'dfg', 'hjt', 'dfb',
       'sdgdas', 'werwe', 'dghfg']

for i, xy in enumerate(dataset):
    plt.scatter(xy[0], xy[1], label=lbl[i])
plt.legend()
plt.savefig('test.png')

最佳答案

您可以限制显示的标签数量。

import matplotlib.pyplot as plt

maxn = 16
for i in range(25):
    plt.scatter(.5, .5, label=(i//maxn)*"_"+str(i))
plt.legend()
plt.show()

enter image description here

这个方法当然也适用于文本标签:

import numpy as np
import matplotlib.pyplot as plt

labels = ["".join(np.random.choice(list("ABCDEFGHIJK"), size=8)) for k in range(25)]
maxn = 16
for i,l in enumerate(labels):
    plt.scatter(.5, .5, label=(i//maxn)*"_"+l)
plt.legend()
plt.show()

enter image description here

这样做的原因是图例中忽略了以 "_" 开头的标签。这在内部用于为对象提供标签而不在图例中显示它们,但我们当然也可以使用它来限制图例中的元素数量。

关于python - 设置图例的最大行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43642368/

相关文章:

Python - 读取文件中的行对

python - 在 map 上绘制电流数据 : Too many value to unpack error

python - 生成适合其生成数据的对数正态样本

python - 如何解决SSL证书错误

python - 如何从 CSV 中的括号中拆分文本,并用它创建另一列

python - 在 C/Python 程序中使用 unsigned long longs 时的不稳定行为

python - matplotlib - 子图中的 twinx 轴没有 xlabel 和 xticks

python - 'pick_event' 处理程序未拾取 Matplotlib 行

python - 如何在 matplotlib 图形文本中使用(新样式)字符串格式

python - 按用户外键搜索类