如何解决如何使用与预先存在的标签相同的颜色自动为matplotlib图形着色?
我正在绘制使用同一标签的多个数据实例。有一些技巧可以从图例中删除重复项,如here所示。
但是,我还想防止同一标签使用不同的颜色。
如果我打电话
import matplotlib.pyplot as plt
plt.plot([1,2,3],[1.0,3.5,2.5],label='a')
plt.plot([1,[1.5,4.0,3.0],[2.0,3.0,3.1],label='b')
plt.plot([1,2.5,1.0],label='b')
ax = plt.gca()
handles,labels = ax.get_legend_handles_labels()
unique = [(h,l) for i,(h,l) in enumerate(zip(handles,labels)) if l not in labels[:i]]
ax.legend(*zip(*unique))
我希望有一个情节:
但是,我得到了这个图:
有没有一种方法可以得到以前的图而无需显式设置颜色,就像这样:
plt.plot([1,label='a',color='C0')
plt.plot([1,label='b',color='C1')
plt.plot([1,color='C1')
解决方法
我认为最直接的方法是只删除每个标签的标签,但每个标签的一行除外:
plt.plot([1,2,3],[1.0,3.5,2.5],label='a',color='C0')
plt.plot([1,[1.5,4.0,3.0],[2.0,3.0,3.1],label='b',color='C1')
plt.plot([1,2.5,1.0],color='C1')
plt.legend()
您可以通过对不想显示的任何标签使用下划线来实现相同的目的:
plt.plot([1,label='_a',label='_b',color='C1')
plt.legend()
我发现这有时对于在循环中绘制很有用(根据循环中的迭代,将'_'
插入标签的开头,也许包括用于设置每行颜色的颜色列表),尽管这样做在您的示例中将是微不足道的。
我想不出您实际上需要matplotlib
来“知道”每一行都是同一标签的一部分的情况。根据我的经验,这种方法很好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。