python - 带有图例的 matplotlib 散点图

标签 python matplotlib plot

我有兴趣在散点图中绘制图例。我当前的代码如下所示

x=[1,2,3,4]
y=[5,6,7,8]
classes = [2,4,4,2]
plt.scatter(x, y, c=classes, label=classes)
plt.legend()

问题在于,当创建绘图时,图例显示为数组,而不是显示唯一标签及其类别。

This is how the plot looks

我知道这是之前在诸如 one 等话题中讨论过的问题,但是我觉得我的问题更简单,那里的解决方案不适合它。另外,在那个例子中,这个人正在指定颜色,但在我的例子中,我事先知道我需要多少种颜色。此外,在 this例如,用户正在创建多个散点图,每个散点图都具有独特的颜色。同样,这不是我想要的。我的目标是使用 x,y 数组和标签简单地创建绘图。这可能吗?

谢谢。

最佳答案

实际上,这两个相关问题都提供了一种实现预期结果的方法。

最简单的方法是创建与存在的唯一类一样多的散点图,并为每个散点图指定一个颜色和图例条目。

import matplotlib.pyplot as plt

x=[1,2,3,4]
y=[5,6,7,8]
classes = [2,4,4,2]
unique = list(set(classes))
colors = [plt.cm.jet(float(i)/max(unique)) for i in unique]
for i, u in enumerate(unique):
    xi = [x[j] for j  in range(len(x)) if classes[j] == u]
    yi = [y[j] for j  in range(len(x)) if classes[j] == u]
    plt.scatter(xi, yi, c=colors[i], label=str(u))
plt.legend()

plt.show()

enter image description here

如果类是字符串标签,解决方案看起来会略有不同,因为您需要从它们的索引中获取颜色,而不是使用类本身。

import numpy as np
import matplotlib.pyplot as plt

x=[1,2,3,4]
y=[5,6,7,8]
classes = ['X','Y','Z','X']
unique = np.unique(classes)
colors = [plt.cm.jet(i/float(len(unique)-1)) for i in range(len(unique))]
for i, u in enumerate(unique):
    xi = [x[j] for j  in range(len(x)) if classes[j] == u]
    yi = [y[j] for j  in range(len(x)) if classes[j] == u]
    plt.scatter(xi, yi, c=colors[i], label=str(u))
plt.legend()

plt.show()

enter image description here

关于python - 带有图例的 matplotlib 散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42056713/

相关文章:

python - 使用python中的单个连接对多个数据库查询进行错误处理

python - 在 pandas groupby 操作中计算唯一元素并总结值

python - Ubuntu 13.10 中的 Ipython 和 Matplotlib

python - Pandas for 循环

matlab - 在 matlab 中使用 plot3 时如何保存绘图?

python - 将输出分配给变量而不是输出文件

python - 产生扩展语法和发送方法

python - 使用对数轴时刻度标签中的小数点不一致

python-2.7 - 绘图标题与 matplotlib 中的文件名相同

python - Pandas plotting - 带斧头图的子图