Python 带有颜色条和图例问题的散点图
Python Scatter Plot with Colorbar and Legend Issues
我正在处理一个非常简单的示例。我在同一组轴上创建了三个散点图,我绘制的每个数据集都有不同的关联颜色图。但是,图例看起来并不像我想要的那样;为什么是这样?
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()
这会产生如下图:
我希望第一个标签是蓝色的,第二个是灰色的,第三个是红色的,所以它们与颜色图相关联,但它看起来不是这样工作的。有没有简单的方法可以做到这一点?
谢谢
我不太明白你为什么这样做 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()
您可以这样设置图例颜色:
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)
...
我正在处理一个非常简单的示例。我在同一组轴上创建了三个散点图,我绘制的每个数据集都有不同的关联颜色图。但是,图例看起来并不像我想要的那样;为什么是这样?
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()
这会产生如下图:
我希望第一个标签是蓝色的,第二个是灰色的,第三个是红色的,所以它们与颜色图相关联,但它看起来不是这样工作的。有没有简单的方法可以做到这一点?
谢谢
我不太明白你为什么这样做 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()
您可以这样设置图例颜色:
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)
...