【问题标题】:matplotlib set color of legendmatplotlib 设置图例的颜色
【发布时间】:2015-10-03 02:59:24
【问题描述】:

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

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

我附上了一个示例图来说明问题。

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

【问题讨论】:

  • 只需使用plt.legend()。它将找到您在对plot 的调用中设置的标签。

标签: python matplotlib plot


【解决方案1】:

您还可以创建假线标记并将它们用作图例条目:

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 被假定为为您的项目提供颜色的字典。

【讨论】:

    【解决方案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() 而无需参数。它将遍历当前轴上的艺术家并使用他们的标签。这样图例中的颜色将与图中的颜色相匹配。

    【讨论】:

    • 我已经编辑了显示我在执行此操作时得到的响应的问题。基本上它为每个点添加一个图例条目
    • 哦,你不应该单独绘制每个点!这是非常低效的。对于每个集群,收集所有点并将它们绘制在一次调用 plt.plot
    • 我该怎么做?你能举个例子吗。现在items 只是一个元组列表(label, [x,y])
    • 请编辑您的答案并添加关于将每个集群中的所有点绘制在一起的评论,我会接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 2013-07-21
    • 2022-01-16
    • 2020-09-25
    相关资源
    最近更新 更多