我正在编写一个程序,其中有多个图形,这些图形以不同的形式(例如 x 与 y、x/y 与 x 等)绘制来自多个来源的数据。我试图引入一些交互元素,用户可以在一个图形上选择某些点(无论它们是来自一个系列还是多个系列),对于这些选定的点,这些点在所有图形上都更改为用户选择的颜色。我尝试实现选择事件和套索选择器来完成这项工作,但我无法同时与多个图形、集合和轴进行交互。我已经包含了一些我用来尝试让它工作的测试代码,正如您将看到的那样,交互存在一些严重的问题!谢谢您的帮助!
#plot picker
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
class SelectPoint(object):
def __init__(self, ax, collection, colorother='#ffffff'):
self.canvas = ax.figure.canvas
self.collection = collection
self.colorother = colorother
self.colorbyitem=colorbyitem
self.canvas.mpl_connect('pick_event', self.on_pick)
def on_pick(self, event):
self.thisparticle=event.artist
self.label=self.thisparticle.get_label()
self.index=event.ind[0]
print self.index
print self.colorbyitem[self.label][self.index]
self.colorbyitem[self.label][self.index]='#ff8000'
self.collection.set_color(self.colorbyitem[self.label])
self.collection.set_edgecolor('#000000')
self.canvas.draw_idle()
colors=['#0000ff','#0000ff','#0000ff','#0000ff','#0000ff']
colors1=['#00ffff','#00ffff','#00ffff','#00ffff','#00ffff']
x1=[1,2,3,4,5]
y1=[1,2,3,4,5]
x1=np.array(x1)
y1=np.array(y1)
colors=np.array(colors)
colors1=np.array(colors1)
colorbyitem={}
item='23532_10'
item2='23555_04'
colorbyitem[item]=colors
colorbyitem[item2]=colors1
x=[1,2,3,4,5]
y=[1,2,3,4,5]
x=np.array(x)
y=np.array(y)
subplot_kw = dict(xlim=(0, 5), ylim=(0, 5), autoscale_on=False)
fig5v4, ax=plt.subplots(subplot_kw=subplot_kw)
fig5v6, ax1=plt.subplots(subplot_kw=subplot_kw)
coll=ax.scatter(x,y, c=colors, s=75, picker=1, label=item)
coll1=ax1.scatter(x1, y1, c=colors, s=75, picker=1, label=item)
coll3=ax.scatter(1.1*y, .9*x, c=colors1, s=75, picker=1, label=item2)
coll4=ax1.scatter(1.1*y, .9*x, c=colors1, s=75, picker=1, label=item2)
selector=SelectPoint(ax, coll)
selector2=SelectPoint(ax1, coll1)
selector3=SelectPoint(ax, coll3)
selector4=SelectPoint(ax1, coll4)
plt.show()
raw_input()