使图例与matplotlib中散点的颜色相对应

2024-04-20 03:36:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个情节,我正在生成通过KMeans算法在scikit学习。这些簇对应不同的颜色。这是情节, enter image description here

我需要一个对应于图中簇号的图的图例。理想情况下,图例应该显示集群的颜色,标签应该是集群编号。谢谢。

编辑:我想我应该写些代码,因为人们都不赞成这个

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

Tags: themapdflabels颜色fig集群plt
1条回答
网友
1楼 · 发布于 2024-04-20 03:36:07

我能使传说与颜色相对应。关键是对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

相关问题 更多 >