我正在进行聚类并尝试绘制结果。虚拟数据集是:
数据
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个簇)上叠加。
color
和cmap
感到困惑,所以我想知道我是否可以使用seaborn或ggplot来实现它。答案 0 :(得分:5)
您可以使用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()
导致:
其中你的"中心"已使用+
标记显示。您可以使用与x and y
答案 1 :(得分:1)
部分内容已经回复here。大纲是
plt.scatter(x, y, c=color)
引用matplotlib的文档:
c:颜色或颜色序列,可选,默认 [...] 请注意,c不应该是单个数字RGB或RGBA序列,因为它与要进行颜色映射的值数组无法区分。 c可以是2-D阵列,其中行是RGB或RGBA。
因此,在您的情况下,您需要为每个聚类添加颜色,然后根据每个点的聚类分配填充颜色数组。
red = [1, 0, 0]
green = [0, 1, 0]
blue = [0, 0, 1]
colors = [red, red, green, blue, green]