1

我正在编写一个程序,其中有多个图形,这些图形以不同的形式(例如 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()
4

0 回答 0