matplotlib设置图例的颜色

时间:2015-07-14 12:54:45

标签: python matplotlib plot

我正在使用matplot lib生成一个绘图,通过执行以下操作绘制许多点(〜几千):

labels = []
for item in items:
        label = item[0]
        labels.append(label)
        plt.plot(item[1][0], item[1][1], 'ro', c = colors[item], label = str(label))

然后通过执行以下操作生成图例:

plt.legend([str(x) for x in np.unique(labels)])

但是,对于图例中的每个标签,相应的颜色是相同的(不是图中的颜色)。有没有办法手动设置图例的颜色。

我附上了一个样本图来说明问题。 enter image description here

- EDIT-- 按照某些人的建议调用plt.legend()似乎并没有为我解决问题,它为每个点添加了一个图例条目。有关示例输出,请参见下图: enter image description here

2 个答案:

答案 0 :(得分:2)

这应该有效:

labels = []
for item in items:
    label = item[0]
    plt.plot(item[1][0], item[1][1], 'o', c=colors[item], label=str(label))
plt.legend()

如果在创建艺术家时直接指定标签(在plot的调用中),则可以不带参数调用plt.legend()。它将遍历当前轴中的艺术家并使用他们的标签。这样,图例中的颜色将与图中的颜色相匹配。

答案 1 :(得分:0)

您还可以创建假行标记并将其用作图例条目:

markers = [plt.Line2D([0,0],[0,0], color=color[item], marker='o', linestyle='') for item in np.unique(items)]
plt.legend(markers, np.unique(labels), numpoints=1)

您可以在this answer中看到完整的示例。

请注意,我尚未对此进行测试,您可能需要将np.unique(items)调整为实际数据集。 color被假定为包含商品颜色的字典。