2013-11-01 28 views
9

'daki dağılım noktalarının renklerine karşılık gelir Scikit-learn'de KMeans algoritması aracılığıyla oluşturduğum bir çizimim var. Kümeler farklı renklere karşılık gelir. Burada, arsadaki küme numarasına karşılık gelen bu arsa için bir desteğe ihtiyaç duyuyorum. İdeal olarak, efsane kümenin rengini göstermeli ve etiket küme numarası olmalıdır. Teşekkürler.Açıklama efsanesi, matplotlib

DÜZENLEME: İnsanların benim efsane rengine uygun hale başardı bu

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

()' komutunu, ya da alternatif bir marka olarak burada

kodudur tüm sınıfları olan ayrı bir renk çubuğu. Sklearn galerisinde bunun nasıl yapılacağını gösteren örnekler var. İnsanlar senin örneğini çalıştıramayacaksın, bu yüzden çalışmak zor ... –

+0

Teşekkürler @ RutgerKassies..Eğer bir çözüm bulursanız lütfen – Nitin

+1

@Nitin sklearn galerisini kontrol edecek, lütfen buraya geri gönderin – cd98

cevap

11

downvoting beri bazı kod koymak gerektiğini düşünüyorum. Anahtar, Rutger Kassies'in bahsettiği verilerdeki her kategori için çoklu dağılımlar kullanıyordu.

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') 

sonuç şuna benzer: Ayrı `m.scatter her küme çizmek olabilir enter image description here

+0

Bu cevap için teşekkürler! Zip yerine numaralandırmayı kullanmayı düşünebilirsiniz. – SeF