2013-11-01 92 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

相关问题