2015-10-05 20 views
5

Quindi ho un semplice diagramma a dispersione, con un evento di selezione. Voglio cambiare il colore del punto dati che clicco con il mouse. Il codice che ho cambierà il colore dell'intero array. Come posso cambiare un punto particolare? GraziePython, Matplotlib, trama di dispersione, Cambia colore sul punto cliccato

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) 

risposta

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