2011-02-28 29 views
190

Estoy tratando de hacer un diagrama de dispersión en matplotlib y no pude encontrar una forma de agregar etiquetas a los puntos. Por ejemplo:Cómo poner etiquetas individuales para un gráfico de dispersión

scatter1=plt.scatter(data1["x"], data1["y"], marker="o", 
        c="blue", 
        facecolors="white", 
        edgecolors="blue") 

que quiero para los puntos en "Y" para tener etiquetas como "punto 1", "punto 2", etc. No podía averiguarlo.

Respuesta

330

Quizás utilizar plt.annotate:

import numpy as np 
import matplotlib.pyplot as plt 

N = 10 
data = np.random.random((N, 4)) 
labels = ['point{0}'.format(i) for i in range(N)] 

plt.subplots_adjust(bottom = 0.1) 
plt.scatter(
    data[:, 0], data[:, 1], marker='o', c=data[:, 2], s=data[:, 3] * 1500, 
    cmap=plt.get_cmap('Spectral')) 

for label, x, y in zip(labels, data[:, 0], data[:, 1]): 
    plt.annotate(
     label, 
     xy=(x, y), xytext=(-20, 20), 
     textcoords='offset points', ha='right', va='bottom', 
     bbox=dict(boxstyle='round,pad=0.5', fc='yellow', alpha=0.5), 
     arrowprops=dict(arrowstyle = '->', connectionstyle='arc3,rad=0')) 

plt.show() 

enter image description here

+7

Eso es lo que iba a decir. Enlace a documentos: http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.annotate Enlace a la demostración: http://matplotlib.sourceforge.net/examples/pylab_examples/annotation_demo2.html – Paul

+0

¡Muy bonito! Funcionó a las mil maravillas. –

+3

@ubuntu ¿Es posible usar números (o etiquetas) _en lugar_ de los puntos? – Vladtn

Cuestiones relacionadas