如何使用与现有标签相同的颜色自动为matplotlib图形着色?

如何使用与现有标签相同的颜色自动为matplotlib图形着色?,matplotlib,Matplotlib,我正在绘制使用同一标签的多个数据实例。有一些技术可以从图例中删除重复项,如图所示 但是,我还想防止同一标签使用不同的颜色 如果我打电话 import matplotlib.pyplot as plt plt.plot([1,2,3], [1.0, 3.5, 2.5], label='a') plt.plot([1,2,3], [1.5, 4.0, 3.0], label='a') plt.plot([1,2,3], [2.0, 3.0, 3.1], label='b') plt.plot([1,

我正在绘制使用同一标签的多个数据实例。有一些技术可以从图例中删除重复项,如图所示

但是,我还想防止同一标签使用不同的颜色

如果我打电话

import matplotlib.pyplot as plt
plt.plot([1,2,3], [1.0, 3.5, 2.5], label='a')
plt.plot([1,2,3], [1.5, 4.0, 3.0], label='a')
plt.plot([1,2,3], [2.0, 3.0, 3.1], label='b')
plt.plot([1,2,3], [1.5, 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,2,3], [1.0, 3.5, 2.5], label='a', color='C0')
plt.plot([1,2,3], [1.5, 4.0, 3.0], label='a', color='C0')
plt.plot([1,2,3], [2.0, 3.0, 3.1], label='b', color='C1')
plt.plot([1,2,3], [1.5, 2.5, 1.0], label='b', color='C1')

我认为最直截了当的做法是删除所有标签,但每个标签的一行除外:

plt.plot([1,2,3], [1.0, 3.5, 2.5], label='a', color='C0')
plt.plot([1,2,3], [1.5, 4.0, 3.0], color='C0')
plt.plot([1,2,3], [2.0, 3.0, 3.1], label='b', color='C1')
plt.plot([1,2,3], [1.5, 2.5, 1.0], color='C1')
plt.legend()

通过对任何不想显示的标签使用初始下划线,可以实现相同的效果:

plt.plot([1,2,3], [1.0, 3.5, 2.5], label='a', color='C0')
plt.plot([1,2,3], [1.5, 4.0, 3.0], label='_a', color='C0')
plt.plot([1,2,3], [2.0, 3.0, 3.1], label='b', color='C1')
plt.plot([1,2,3], [1.5, 2.5, 1.0], label='_b', color='C1')
plt.legend()
我发现这有时对于在循环中打印很有用(根据循环中的迭代将
'.
插入到标签的开头,可能包括一个颜色列表来设置每行的颜色-尽管在您的示例中这很简单)

我想不出有哪种情况需要
matplotlib
才能“知道”每一行都是同一标签的一部分。根据我的经验,这些方法都很好