2011-02-28 27 views
190

我想在matplotlib中做一个散点图,但我找不到向点添加标记的方法。例如:如何为散点图添加单个标记

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

我想为“Y”的点有标签为“点1”,“2点”,等等。我无法弄清楚。

回答

330

也许使用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

这就是我要说的。链接到文档:http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.annotate链接到演示:http://matplotlib.sourceforge.net/examples/pylab_examples/annotation_demo2.html – Paul 2011-02-28 21:06:38

+0

非常好!它像一个魅力。 – 2011-02-28 21:12:49

+3

@ubuntu是否有可能使用数字(或标签)_index of the points? – Vladtn 2012-02-29 13:40:31