Добавление нескольких (кластерных) меток на базовую карту - PullRequest
0 голосов
/ 29 августа 2018

Вот мой код для применения алгоритма кластеризации KMeans в Великобритании для моего набора данных (на 2 кластера). В строке clusters = m.scatter(etc,..) я хочу иметь возможность пометить оба кластера. Аналогично, в строке cog = m.scatter(etc,..) я хочу иметь соответствующие метки «CoG Cluster 1» И «CoG Cluster 2».

Я пробовал что-то вроде зацикливания, но все еще кажется, что он наносит только 1 метку.

enter image description here

import pandas as pd
from sklearn.cluster import KMeans
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10, 10))
m = Basemap(projection='lcc', resolution='h', 
        lat_0=54.7, lon_0=-3.36,
        width=0.7E6, height=1.2E6)

m.drawmapboundary(fill_color='white')
m.drawcoastlines()
m.drawcountries()

#load locations
X = pd.read_csv("123.csv")

lat = X['Latitude'].values
lon = X['Longitude'].values

#apply the KMeans Clustering Algorithm and plot clusters
km = KMeans(n_clusters=2, random_state=0, algorithm ='full')
km.fit(X)

# review the cluster labels, save them, and sort by cluster
X['cluster'] = km.labels_

# save the DataFrame of cluster centers
centers = X.groupby('cluster').mean()

# create a "colors" array for plotting
import numpy as np
cluster_colors = np.array(['green','blue'])
centroid_colors = np.array(['black','orange'])

# scatter plot colored by cluster (1=green, 2=blue)
clusters = m.scatter(lon, lat, latlon=True, c=cluster_colors[X.cluster], s=80, alpha=0.8,label="Cluster 2")

#plot centre of gravity for each cluster (unweighted)
cog = m.scatter(centers['Longitude'].values, centers['Latitude'].values, latlon=True, marker='s', alpha=0.8, s=200, c=centroid_colors[X.cluster],label="CoG Cluster 1")

plt.legend(frameon=True,facecolor='white',handles=[cog,clusters])

plt.show()
...