1

複数のソースからのデータを異なる形式 (x 対 y、x/y 対 x など) でプロットする複数の図があるプログラムを作成しています。ユーザーが 1 つの図の特定のポイント (1 つのシリーズまたは複数のシリーズのいずれか) を選択できる相互作用の要素を導入しようとしています。それらの選択されたポイントについては、すべての図でユーザーが選択した色にポイントが変更されます。選択イベントとなげなわセレクターを実装して仕事をしようとしましたが、複数の図、コレクション、および軸を同時に操作することはできません。これを機能させるために使用しているテスト コードをいくつか含めましたが、ご覧のとおり、対話には深刻な問題がいくつかあります。助けてくれてありがとう!

#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