Hacer que la leyenda corresponda con los colores de los puntos de dispersión en matplotlib

Tengo un gráfico que estoy generando a través del algoritmo KMeans en scikit-learn. Los racimos corresponden a diferentes colores. Aquí está la ttwig, introduzca la descripción de la imagen aquí

Necesito una leyenda para este gráfico que corresponda al número de grupo en el gráfico. Idealmente, la leyenda debe mostrar el color del grupo y la etiqueta debe ser el número del grupo. Gracias.

EDITAR: Creo que debería poner algo de código ya que la gente está votando esto

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

Pude hacer que la leyenda correspondiera al color. La clave fue el uso de múltiples diagtwigs de dispersión para cada categoría en los datos tal como lo menciona Rutger Kassies.

Aquí está el código:

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

El resultado se ve algo como esto: introduzca la descripción de la imagen aquí