我的数据会导致绘制多条线,我想在图例中给这些线给予一个标签。我认为使用下面的示例可以更好地说明这一点,
a = np.array([[ 3.57, 1.76, 7.42, 6.52],
[ 1.57, 1.2 , 3.02, 6.88],
[ 2.23, 4.86, 5.12, 2.81],
[ 4.48, 1.38, 2.14, 0.86],
[ 6.68, 1.72, 8.56, 3.23]])
plt.plot(a[:,::2].T, a[:, 1::2].T, 'r', label='data_a')
plt.legend(loc='best')
正如你在Out[23]中看到的,图中有5条不同的线。
有没有什么方法可以让plot方法避免使用多个标签?我不想尽可能多地使用自定义图例(同时指定标签和线条形状)。
9条答案
按热度按时间bq9c1y661#
如果我打算经常做的话,我会亲自做一个小的助手函数;
从
handles
和labels
的图例中删除重复项(比您现有的)的一种更简单(也更清晰)的方法是:xmakbtuz2#
Numpy解决方案基于上面的威尔的回应。
假设相等的标签有相等的句柄,得到唯一的标签和它们各自的索引,它们对应于句柄索引。
mwngjboj3#
Matplotlib为您提供了一个很好的行集合接口LineCollection。
这将导致以下输出:
dphi5xsq4#
一个低技术的解决方案是做两个plot调用。一个绘制你的数据,另一个只绘制句柄:
结果如下:
vybvopom5#
因此,使用威尔的建议和另一个问题here,我在这里留下我的补救措施
新的图看起来像,
bmp9r5qi6#
最简单也是最pythonic的删除重复的方法是使用一个dict的键,它保证是唯一的。这也保证了我们只对每个(handle,label)对重复一次。
ql3eal8s7#
我会做这个把戏:
2fjabf4q8#
我找到了一个简单的方法来解决这个问题:
rqcrx0a69#
如果“None”作为标签提供,则不会打印标签。因此只需执行以下操作:
Plot From The Code Above
一个更懒惰的选择: