2015-10-05 124 views
5

所以我有一个简单的散点图,带有一个选择器事件。我想改变用鼠标点击的数据点的颜色。我有的代码将改变整个数组的颜色。我怎样才能改变一个特定点?谢谢Python,Matplotlib,Scatter plot,改变点击点的颜色

import sys 
import numpy as np 
import matplotlib.pyplot as plt  
testData = np.array([[0,0], [0.1, 0], [0, 0.3], [-0.4, 0], [0, -0.5]]) 
    fig, ax = plt.subplots() 
    sctPlot, = ax.plot(testData[:,0], testData[:,1], "o", picker = 5) 
    plt.grid(True) 
    plt.axis([-0.5, 0.5, -0.5, 0.5]) 

def on_pick(event): 
    artist = event.artist 
    artist.set_color(np.random.random(3)) 
    print "click!" 
    fig.canvas.draw() 

fig.canvas.mpl_connect('pick_event', on_pick) 

回答

5
import sys 
import numpy as np 
import matplotlib.pyplot as plt 

testData = np.array([[0,0], [0.1, 0], [0, 0.3], [-0.4, 0], [0, -0.5]]) 
fig, ax = plt.subplots() 
coll = ax.scatter(testData[:,0], testData[:,1], color=["blue"]*len(testData), picker = 5, s=[50]*len(testData)) 
plt.grid(True) 
plt.axis([-0.5, 0.5, -0.5, 0.5]) 

def on_pick(event): 
    print testData[event.ind], "clicked" 
    coll._facecolors[event.ind,:] = (1, 0, 0, 1) 
    coll._edgecolors[event.ind,:] = (1, 0, 0, 1) 
    fig.canvas.draw() 

fig.canvas.mpl_connect('pick_event', on_pick) 
plt.show()