2015-06-05 108 views
1

我正在处理一个非常简单的示例。我在同一组轴上创建三个散点图,并且每个数据集I图都有一个不同的关联色图。然而,这个传说并不像我想要的那样;为什么是这样?带有颜色条和图例问题的Python散点图

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

我希望第一个标签是蓝色的,第二个是灰色,第三个是红色的,所以他们正在与相关色彩地图,但它看起来不像它的工作原理。有没有简单的方法来做到这一点?

感谢

+0

将在传说中的3个点有什么颜色,如果你将设置颜色映射到'jet'? – hitzg

+0

我尝试制作第二组分散点“jet”的颜色映射,并且图例保持不变。它看起来像下面的人有一个答案! – Chimi

回答

3

可以设置图例颜色例如:

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的颜色设置为在一个特定的值各自的色彩地图。

enter image description here

如果使散射点的大小,你可以看到的颜色和准单个点与传说更容易。我还为图例中的每个散点图设置了一个点,而不是默认的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) 
... 

enter image description here

+1

完美,谢谢!我是Python新手,所以我不太喜欢操纵传说。这正是我所期待的。 – Chimi

+0

@Chimi快乐为你工作。 – Scott

-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() 
+0

嗨,c = t是这样,每个点的颜色根据变量t沿着指定的色彩图变化。 – Chimi