2017-10-09 5 views
2

PatchCollectionにグループ化されたパッチのコレクションが、コレクションとして軸に追加されています。ピック・イベントのコールバックが確立されます。パッチの1つをクリックすると、ピック・イベントが発生し、コールバックが呼び出されますが、イベントのアーティスト・メンバーは、クリックされたアーティスト・オブジェクトではなくPatchCollectionオブジェクトです。各パッチをテストせずにクリックしたアーティストを特定するにはどうすればよいですか?PatchCollectionオブジェクトのピックイベントがクリックされたアーティストをターゲットにしていません

import matplotlib.pyplot as plt 
from matplotlib.patches import Circle, Rectangle 
from matplotlib.collections import PatchCollection 
import numpy as np 

def onclick(event): 
    if event.xdata is not None: 
     print('%s click: button=%d, x=%d, y=%d, xdata=%f, ydata=%f' % 
      ('double' if event.dblclick else 'single', event.button, 
      event.x, event.y, event.xdata, event.ydata)) 

def onpick(event): 
    print("artist=", event.artist) 

    #print("You picked {:s}, which has color={:s} and linewidth={:f}".format(\ 
    # event.artist, event.artist.get_color(), event.artist.get_linewidth())) 

N = 25 

fig = plt.figure(figsize=(5,5)) 
ax = fig.add_subplot(111, aspect='equal') 
ax.set_axis_bgcolor('0.8') 

ax.set_xlim([0,1]) 
ax.set_ylim([0,1]) 

xpts = np.random.rand(N) 
ypts = np.random.rand(N) 
patches = [] 
for x,y in zip(xpts,ypts): 
    circle = Circle((x,y),0.03) 
    patches.append(circle) 

colors = 100 * np.random.rand(len(patches)) 
p = PatchCollection(patches, alpha=.5, picker=2) 
p.set_array(np.array(colors)) 
ax.add_collection(p) 

#cid = fig.canvas.mpl_connect('button_press_event', onclick) 
pid = fig.canvas.mpl_connect('pick_event', onpick) 

plt.show() 

答えて

1

コレクションのアイデアは、単一のパッチがないということです。それ以外の場合は、既存のパッチの単純なリストになります。したがって、存在しないため、コレクションから単一のパッチを取得する方法はありません。

クリックしたコレクションメンバーのプロパティの一部を取得するには、event.indを使用できます。これは、クリックされたメンバーのインデックスです。

あなたは、コレクションのプロパティから情報を取得するために、このインデックスを使用することができます

def onpick(event): 
    if type(event.artist) == PatchCollection: 
     for i in event.ind: 
      color = event.artist.get_facecolor()[i] 
      print("index: {}, color: {}".format(i,color)) 

# index: 23, color: [ 0.279566 0.067836 0.391917 0.5  ] 
+0

のようなものを印刷し、私は私がにすべてのパッチを均質化に関するドキュメントに一部を逃したと思いますコレクション。私はそれを単にリストとして維持していると仮定しました。とにかく、これにより、どのパッチかパッチがクリックされたかを把握できます。 – sizzzzlerz

関連する問題