如何在Python中为聚类创建散点图

时间:2015-06-30 11:30:29

标签: python matplotlib seaborn python-ggplot

我正在进行聚类并尝试绘制结果。虚拟数据集是:

数据

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来完成任务。
  • ggplot 由yhat可以使散点图更好,但第二个图将取代第一个。
  • 我对 matplotlib 中的colorcmap感到困惑,所以我想知道我是否可以使用seaborn或ggplot来实现它。

2 个答案:

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

导致:

enter image description here

其中你的"中心"已使用+标记显示。您可以使用与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]