Matplotlib设置图例的颜色。

4

我正在使用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

- 编辑 - 一些建议只需调用plt.legend()似乎不能解决我的问题,它会为每个点添加一个图例条目。 请参见下面的图像以获取示例输出: enter image description here


只需使用 plt.legend()。它会找到您在调用 plot 时设置的标签。 - hitzg
2个回答

4

这应该可以工作:

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()。它将遍历当前轴中的艺术家并使用它们的标签。这样图例中的颜色将与绘图中的颜色相匹配。


我已经编辑了问题,展示了在执行此操作时所得到的响应。基本上它为每个点添加了一个图例条目。 - Aly
哦,你不应该单独绘制每个点!这样非常低效。对于每个聚类,收集所有点并在单个调用plt.plot中绘制它们。 - hitzg
我该怎么做?你能提供一个例子吗?现在,items只是一个元组列表 (label, [x,y]) - Aly
请仅返回翻译后的文本: 请注意将每个簇中的所有点一起绘制,我会接受。 - Aly

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)

您可以在此答案中看到完整的示例。

请注意,我尚未测试过这个示例,您可能需要根据实际数据集调整np.unique(items)color被假定为一个包含您项目颜色的字典。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接