2016-04-05 52 views
1

我只是在Python如何可视化输出集群,每个集群独特的颜色

福利局我有代码互联网为执行K-方式使用scikit上搜索,我曾尝试修改可视情节3D代码和颜色的每个簇( 3簇),但结果是与相同颜色的所有群集,代码及以下可视化:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import style 
style.use("ggplot") 
from sklearn.cluster import KMeans 
from collections import Counter 
from mpl_toolkits.mplot3d import Axes3D 
from pylab import * 

X = np.array([[1, 2, 5], 
       [5, 8, 2], 
       [1.5, 1.8, 6], 
       [8, 8, 9], 
       [1, 0.6, 10], 
       [2.5, 3.8, 6], 
       [2.5, 5.8, 9], 
       [5, 8, 3], 
       [4, 0.6, 7], 
       [2.5, 1.8, 4.6], 
       [6.5, 1.8, 12], 
       [7, 8, 9], 
       [2, 0.6, 7], 
       [5.5, 1.8, 4], 
       [4.8, 6.9, 6], 
       [4.9, 9.8, 2], 
       [9, 11, 12]]) 


cluster_num = 3 

kmeans = KMeans(n_clusters=cluster_num) 
kmeans.fit(X) 

centroids = kmeans.cluster_centers_ 
labels = kmeans.labels_ 

print "centroids : " 
print centroids 
print "labels : " 
print labels 

colors = ["g.","r.","c.","y."] 

color = np.random.rand(cluster_num) 

c = Counter(labels) 


fig = figure() 
ax = fig.gca(projection='3d') 


for i in range(len(X)): 
    print("coordinate:",X[i], "label:", labels[i]) 
    print "i : ",i 
    print "color[labels[i]] : ",color[labels[i]] 
    ax.scatter(X[i][0], X[i][1], X[i][2], c=color[labels[i]]) 


for cluster_number in range(cluster_num): 
    print("Cluster {} contains {} samples".format(cluster_number, c[cluster_number])) 

ax.scatter(centroids[:, 0],centroids[:, 1], centroids[:, 2], marker = "x", s=150, linewidths = 5, zorder = 100) 

plt.show() 

enter image description here 我怎样才能使可视化每个集群有自己的颜色? thx

回答

0

现在color = np.random.rand(cluster_num)正在生成三个随机数,并且在ax.scatter(X[i][0], X[i][1], X[i][2], c=color[labels[i]])中,您试图将这些随机数指定为颜色。

取而代之,您可以更改color = ["g", "r", "b"],以便第一个群集为绿色,第二个为红色,第三个为蓝色。

对于集群中心,传递相同的参数:

ax.scatter(centroids[:, 0],centroids[:, 1], centroids[:, 2], marker = "x", s=150, linewidths = 5, zorder = 100, c=color) 

enter image description here

+0

它的工作! thx @ayhan – ihsansat

+0

嗨@ayhan,如何在散点图上显示每个点的坐标?谢谢 – ihsansat