带有颜色条和图例问题的 Python 散点图

Chi*_*imi 4 python matplotlib legend scatter-plot

我正在使用一个非常简单的示例。我在同一组轴上创建了三个散点图,我绘制的每个数据集都有一个不同的关联颜色图。然而,传说并不像我想要的那样;为什么是这样?

import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0,10,100)
x = np.random.rand(100,3)
y = np.random.rand(100,3)

colmaps = ['Blues', 'Greys', 'Reds']
for i in range(3):
    plt.scatter(x[:,i], y[:,i], c=t, cmap=colmaps[i], label=i)

plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

这会产生如下图: 图例条目全部为蓝色

我希望第一个标签是蓝色的,第二个是灰色的,第三个是红色的,所以它们与颜色图相关联,但看起来它不是这样工作的。有没有一种简单的方法可以做到这一点?

谢谢

Sco*_*ott 8

您可以将图例颜色设置为:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0,10,100)
x = np.random.rand(100,3)
y = np.random.rand(100,3)
colmaps = ['Blues', 'Greys', 'Reds']

for i in range(3):
    plt.scatter(x[:,i], y[:,i], c=t, cmap=colmaps[i], label=i)

plt.legend()
ax = plt.gca()
legend = ax.get_legend()
legend.legendHandles[0].set_color(plt.cm.Blues(.8))
legend.legendHandles[1].set_color(plt.cm.Greys(.8))
legend.legendHandles[2].set_color(plt.cm.Reds(.8))
plt.show()
Run Code Online (Sandbox Code Playgroud)

我将每个颜色的颜色设置为相应颜色图中legendHandle的特定值。

在此处输入图片说明

如果您使散点的尺寸更大,您可以更容易地看到颜色并将单个点与图例相关联。我还在图例中为每个散点图设置了一个点,而不是默认的 3,并将图例的 alpha 设置为 0.5,将散点图的 alpha 设置为 0.7。

...
for i in range(3):
    plt.scatter(x[:,i], y[:,i], c=t, cmap=colmaps[i], label=i, s=200, alpha=0.7)
plt.legend(markerscale=0.7, scatterpoints=1)
ax = plt.gca()
legend = ax.get_legend()
legend.legendHandles[0].set_color(plt.cm.Blues(.8))
legend.legendHandles[1].set_color(plt.cm.Greys(.8))
legend.legendHandles[2].set_color(plt.cm.Reds(.8))
legend.get_frame().set_alpha(0.5)
...
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明