2013-11-01 136 views
9

我有一個通過scikit-learn中的KMeans算法生成的圖。羣集對應於不同的顏色。這裏是圖, enter image description here使圖例對應於matplotlib中散點的顏色

我需要這個圖的圖例對應於圖中的叢集號。理想情況下,圖例應該顯示集羣的顏色,標籤應該是集羣編號。謝謝。

編輯:我想我應該把一些代碼,因爲人們downvoting這

from sklearn.cluster import KMeans 
km = KMeans(n_clusters=20, init='random') 
km.fit(df) #df is the dataframe which contains points as coordinates 
labels = km.labels_ 
plt.clf() 
fig = plt.figure() 
ax = fig.add_subplot(111, axisbg='w', frame_on=True) 
fig.set_size_inches(18.5, 10.5) 

# Plot the clusters on the map 
# m is a basemap object 
m.scatter(
     [geom.x for geom in map_points], 
     [geom.y for geom in map_points], 
     20, marker='o', lw=.25, 
     c = labels.astype(float), 
     alpha =0.9, antialiased=True, 
     zorder=3) 
m.fillcontinents(color='#555555') 
plt.show() 
+0

你可以繪製每個集羣有一個單獨的'm.scatter()'命令,或作爲替代化妝與所有類的離散的顏色條。在sklearn畫廊舉例說明如何做到這一點。人們無法運行你的例子,所以這是很難與... –

+0

謝謝@ RutgerKassies ..我會檢查出sklearn畫廊 – Nitin

+1

@Nitin,如果你想出了一個解決方案,請把它發回這裏 – cd98

回答

11

我能夠讓傳說對應的顏色。關鍵是對Rutger Kassies提到的數據中的每個類別使用多個散點圖。

下面是代碼:

import numpy as np 
import matplotlib.pyplot as plt 

# Setting various plot properties 
plt.clf() 
fig = plt.figure() 
ax = fig.add_subplot(111, axisbg='w', frame_on=True) 
fig.set_size_inches(18.5, 10.5) 

# Creating a discrete colorbar 
colors = plt.cm.rainbow(np.linspace(0, 1, 20)) 

current_plot_range = 0 
previous_plot_range = 0 

for i,c in enumerate(colors): 
    previous_plot_range += current_plot_range 
    current_plot_range = labels[labels==i].size 
    m.scatter(
     [geom.x for geom in map_points[  
      previous_plot_range:previous_plot_range+current_plot_range]], 
     [geom.y for geom in map_points[ 
      previous_plot_range:previous_plot_range+current_plot_range]], 
     20, lw=.25, marker='o',color = c, label=i, alpha =0.9, antialiased=True, 
     zorder=3) 

plt.legend() 
m.fillcontinents(color='#555555') 

結果看起來是這樣的: enter image description here

+0

感謝您的回答!你可以考慮使用枚舉而不是zip。 – SeF

相關問題