Python,Matplotlib,散点图,单击点后更改颜色

9

我有一个简单的散点图,并且带有选择器事件。
我想要改变我用鼠标点击的数据点的颜色。
我现在的代码会改变整个数组的颜色。
我应该如何只改变一个特定的点?

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)
1个回答

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

2
是否可以同时选择多个标记以检索它们后面的数据?比如在散点图上画一个矩形,然后对矩形内的所有标记进行操作。 - user3376020
user337,这里有一个套索功能:https://matplotlib.org/3.2.1/gallery/widgets/lasso_selector_demo_sgskip.html - eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接