我正在使用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)])
但是,对于图例中的每个标签,相应的颜色是相同的(不是图中的颜色)。有没有办法手动设置图例的颜色。
我附上了一个样本图来说明问题。
- EDIT--
按照某些人的建议调用plt.legend()
似乎并没有为我解决问题,它为每个点添加了一个图例条目。有关示例输出,请参见下图:
答案 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
被假定为包含商品颜色的字典。