2014-06-09 32 views
0

我正在做kmeans並嘗試繪製多個羣集。matplotlib散點圖np.choose值錯誤

我有下面的代碼,其中X是我的數據點陣列:

centroids, ks = kmeans2(X,3) 
colors = ['r', 'g', 'b'] 
plt.scatter(X[:,0],X[:,1], c=np.choose(ks, colors)) 
plt.show() 

當試圖用3個集羣繪製,一切都很好enter image description here

當試圖繪製計算4個集羣,我得到一個錯誤說:

plt.scatter(X[:,0],X[:,1], c=np.choose(ks, colors)) 
    File "/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 297, in choose 
    return choose(choices, out=out, mode=mode) 
ValueError: invalid entry in choice array 
+0

隨着4組,你不應該需要4種顏色?像'colors = ['r','g','b','k']'? –

+0

很好的評論!你知道我怎麼能有很多顏色?假設我想擁有50個集羣? –

+0

要了解評論,請參閱以下答案。 –

回答

1

你需要有至少n顏色n組。我會建議使用Paired顏色表,當你有大量的羣體,你想不同的羣體有不同的顏色:

In [223]: 
#An example of generation 10 different colors. 
import matplotlib.cm as cmap 
cmap.Paired(np.linspace(0,1,10)) #returns rgba values for 10 different colors. 
Out[223]: 
array([[ 0.65098041, 0.80784315, 0.89019608, 1.  ], 
     [ 0.24138409, 0.55454056, 0.67164939, 1.  ], 
     [ 0.49101116, 0.77181086, 0.38794312, 1.  ], 
     [ 0.72287582, 0.61176473, 0.45751636, 1.  ], 
     [ 0.90200693, 0.16495195, 0.17131873, 1.  ], 
     [ 0.9931411 , 0.71752404, 0.38066898, 1.  ], 
     [ 0.93071896, 0.56470589, 0.27973857, 1.  ], 
     [ 0.57217994, 0.42994234, 0.70173012, 1.  ], 
     [ 0.8785544 , 0.8418762 , 0.60081509, 1.  ], 
     [ 0.69411767, 0.34901962, 0.15686275, 1.  ]]) 
+0

聽起來不錯!謝謝。但是,有一個問題,我在選擇方法 Value error:shape mismatch上得到了一行plt.scatter(X [:,0],X [:,1],c = np.choose(ks,colors))上的錯誤:對象不能廣播到一個形狀 –

+1

我記得'ks'應該是'int'的一維數組,在這種情況下,用'colors [ks]替換'c = np.choose(ks,colors)'' '應該修復它。 –