我的数据会导致绘制多条线,我想在图例中为这些线提供一个标签。我想用下面的例子可以更好地说明这一点,
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条答案
按热度按时间h43kikqp1#
如果我打算经常做的话,我会自己做一个小的辅助函数;
字符串
从
handles
和labels
的图例中删除重复项(比您现有的)的一种更简单(也更清晰)的方法是:型
rekjcdws2#
Numpy的解决方案基于上面Will的回答。
字符串
假设相等的标签有相等的句柄,得到唯一的标签和它们各自的索引,它们对应于句柄索引。
型
new9mtju3#
Matplotlib为您提供了一个很好的行集合接口LineCollection。代码很简单
字符串
这将产生以下输出:
的数据
tzdcorbm4#
一个低技术的解决方案是做两个情节调用。一个绘制您的数据,另一个只绘制句柄:
字符串
结果如下:
的数据
hfsqlsce5#
因此,使用will的建议和另一个问题here,我在这里留下我的补救措施
字符串
新的图看起来像,
5f0d552i6#
最简单和最pythonic的方法来删除重复是使用一个字典的键,这是保证是唯一的。这也确保了我们只对每个(handle,label)对迭代一次。
字符串
jmo0nnb37#
我会做这个把戏:
字符串
ig9co6j18#
我找到了一个简单的方法来解决这个问题:
字符串
iyr7buue9#
如果提供“无”作为标签,则不打印标签。你就这么做吧
字符串
Plot From The Code Above
一个更懒惰的选择:
型