有没有一种快速设置散点图图例而不循环的方法?

Is there a quick way to set the legend of a scatterplot without looping?

我有 3 个这样的数组:

x = [1,2,3,4,5]
y = [5,4,3,2,1]
c = [0,0,1,0,1]

plt.figure(figsize = (12,9))

plt.scatter(x = x, y = y, c = c)

plt.legend(['0', '1'])

我能够生成这样的散点图:

但我想要的是它能区分0和1之间的颜色。

解决方案 对 类 执行 for 循环以获得所需的结果。 我也试过迭代 plt.scatter() 对象,但它不可迭代。

是否有某种简单的解决方案?最好没有循环,只有大约 1 行代码?

还没有。但是 Matplotlib 很快就会发布一个直接 scatter + legend 的 scatter 版本,不需要多次调用。

请注意,您还可以使用 the Seaborn scatterplot function 来生成带有单行标签的散点图(请参阅下面的 Seaborn 文档):

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")

您可以循环并使用适当的标签将所有不同的数据集一个一个地绘制出来。 在这里,我先画红点再画绿点。

import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [5,4,3,2,1]
c = [0,0,1,0,1]

unique = list(set(c))
colors = ['red','green']
for i, u in enumerate(unique):
    xi = [x[j] for j  in range(len(x)) if c[j] == u]
    yi = [y[j] for j  in range(len(x)) if c[j] == u]
    plt.scatter(xi, yi, c=colors[i], label=str(u))
plt.legend()

plt.show()