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

4
我正在处理一个非常简单的例子。我在同一组坐标轴上创建了三个散点图,每个数据集都使用不同的配色方案。但是,图例并没有像我希望的那样看起来。这是为什么呢?
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()

这将产生以下类似的图形:Legend entries are all blue 我希望第一个标签是蓝色的,第二个标签是灰色的,第三个标签是红色的,这样它们就与颜色图例相关联,但看起来它不是这样工作的。有没有简单的方法来实现这个要求?
谢谢。

如果将色图设置为“jet”,则图例中的3个点会是什么颜色? - hitzg
我尝试将第二组散点图的色图设置为“jet”,但图例仍然保持不变。看起来下面有人已经给出了答案! - Chimi
2个回答

9
您可以设置图例颜色如下所示:
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()

我在各自的色图中将每个 "legendHandle" 的颜色设置为特定值。 如果您使散点大小更大,则可以更轻松地查看颜色并将单个点与图例关联起来。我还在图例中设置了仅一个点而非默认的 3 个点,并将图例的 alpha 值设置为 0.5,scatter plot 的 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)
...

enter image description here


1
太好了,谢谢!我是Python的新手,所以对于操作图例不是很熟悉。这正是我一直在寻找的。 - Chimi

-1

我不太明白你为什么要做 c=t ... 但这是你想要的吗?

enter image description here

这里是代码:

  1 import numpy as np 
  2 import matplotlib.pyplot as plt
  3                    
  4 colors = ['b', 'c', 'r']
  5 markers = ['x', 'o', '^']
  6 scatters = []      
  7                    
  8 x = np.random.rand(100,3)
  9 y = np.random.rand(100,3)
 10                    
 11 for i in range(3): 
 12     scatters.append(plt.scatter(x[:,i], y[:,i], color=colors[i], marker=markers[i], label=i))
 13                    
 14 plt.legend((scatters[0], scatters[1], scatters[2]),
 15             ('scatter 1', 'scatter 2', 'scatter 3'),
 16             scatterpoints=1,
 17             loc='upper right',
 18             ncol=3,                                                                                                 
 19             fontsize=8)
 20 plt.show()

嗨,c=t是为了使每个点的颜色根据指定的颜色映射变量t而异。 - Chimi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接