如何在 Python 中制作聚类散点图
How to make a scatter plot for clustering in Python
我正在进行聚类并尝试绘制结果。虚拟数据集是:
数据
import numpy as np
X = np.random.randn(10)
Y = np.random.randn(10)
Cluster = np.array([0, 1, 1, 1, 3, 2, 2, 3, 0, 2]) # Labels of cluster 0 to 3
集群中心
centers = np.random.randn(4, 2) # 4 centers, each center is a 2D point
问题
我想制作一个散点图来显示 data
中的点,并根据聚类标签为这些点着色。
然后我想将 center
点叠加在同一个散点图上,以另一种形状(例如 'X')和第五种颜色(因为有 4 个簇)。
评论
- 我转向seaborn 0.6.0,但发现没有API完成任务。
yhat 的 - ggplot 可以使散点图很好,但第二个图将取代第一个。
- 我对 matplotlib 中的
color
和 cmap
感到困惑,所以我想知道我是否可以使用 seaborn 或 ggplot 来完成它。
部分问题已得到解答 here。大纲是
plt.scatter(x, y, c=color)
引用 matplotlib 的文档:
c : color or sequence of color, optional, default
[...]
Note that c should not be a single numeric RGB or RGBA sequence because that is indistinguishable from an array of values to be colormapped. c can be a 2-D array in which the rows are RGB or RGBA, however.
因此在您的情况下,您需要为每个聚类分配一种颜色,然后根据每个点的聚类分配填充颜色数组。
red = [1, 0, 0]
green = [0, 1, 0]
blue = [0, 0, 1]
colors = [red, red, green, blue, green]
问题的第一部分可以使用 colorbar
并将颜色指定为 Cluster
数组来完成。我已经模糊地理解了你问题的第二部分,但我相信这就是你要找的。
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(10)
y = np.random.randn(10)
Cluster = np.array([0, 1, 1, 1, 3, 2, 2, 3, 0, 2]) # Labels of cluster 0 to 3
centers = np.random.randn(4, 2)
fig = plt.figure()
ax = fig.add_subplot(111)
scatter = ax.scatter(x,y,c=Cluster,s=50)
for i,j in centers:
ax.scatter(i,j,s=50,c='red',marker='+')
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.colorbar(scatter)
fig.show()
这导致:
其中您的 "centres" 已使用 +
标记显示。您可以按照为 x and y
所做的相同方式指定您想要的任何颜色
我正在进行聚类并尝试绘制结果。虚拟数据集是:
数据
import numpy as np
X = np.random.randn(10)
Y = np.random.randn(10)
Cluster = np.array([0, 1, 1, 1, 3, 2, 2, 3, 0, 2]) # Labels of cluster 0 to 3
集群中心
centers = np.random.randn(4, 2) # 4 centers, each center is a 2D point
问题
我想制作一个散点图来显示 data
中的点,并根据聚类标签为这些点着色。
然后我想将 center
点叠加在同一个散点图上,以另一种形状(例如 'X')和第五种颜色(因为有 4 个簇)。
评论
- 我转向seaborn 0.6.0,但发现没有API完成任务。 yhat 的
- ggplot 可以使散点图很好,但第二个图将取代第一个。
- 我对 matplotlib 中的
color
和cmap
感到困惑,所以我想知道我是否可以使用 seaborn 或 ggplot 来完成它。
部分问题已得到解答 here。大纲是
plt.scatter(x, y, c=color)
引用 matplotlib 的文档:
c : color or sequence of color, optional, default [...] Note that c should not be a single numeric RGB or RGBA sequence because that is indistinguishable from an array of values to be colormapped. c can be a 2-D array in which the rows are RGB or RGBA, however.
因此在您的情况下,您需要为每个聚类分配一种颜色,然后根据每个点的聚类分配填充颜色数组。
red = [1, 0, 0]
green = [0, 1, 0]
blue = [0, 0, 1]
colors = [red, red, green, blue, green]
问题的第一部分可以使用 colorbar
并将颜色指定为 Cluster
数组来完成。我已经模糊地理解了你问题的第二部分,但我相信这就是你要找的。
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(10)
y = np.random.randn(10)
Cluster = np.array([0, 1, 1, 1, 3, 2, 2, 3, 0, 2]) # Labels of cluster 0 to 3
centers = np.random.randn(4, 2)
fig = plt.figure()
ax = fig.add_subplot(111)
scatter = ax.scatter(x,y,c=Cluster,s=50)
for i,j in centers:
ax.scatter(i,j,s=50,c='red',marker='+')
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.colorbar(scatter)
fig.show()
这导致:
其中您的 "centres" 已使用 +
标记显示。您可以按照为 x and y