【问题标题】:Python Scatter Plot with Colorbar and Legend Issues带有颜色条和图例问题的 Python 散点图
【发布时间】:2015-06-05 23:13:23
【问题描述】:

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

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

这会产生如下图:

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

谢谢

【问题讨论】:

  • 如果您将颜色图设置为 jet,图例中的 3 个点会有什么颜色?
  • 我尝试为第二组散点“喷射”制作颜色图,图例保持不变。看来下面有人有答案了!

标签: python matplotlib legend scatter-plot


【解决方案1】:

您可以这样设置图例颜色:

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,散点图的 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)
...

【讨论】:

  • 完美,谢谢!我是 Python 新手,所以我不太习惯操纵图例。这正是我想要的。
【解决方案2】:

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

代码如下:

  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 变化。
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 2011-07-26
  • 2015-07-04
  • 2019-09-28
相关资源
最近更新 更多