私はきちんとmatplotlibのピックイベントを使用していないと信じてmatplotlibのピックイベントを使用します。次のコードでは、ID番号で指定された指定半径と位置の3つの互いに孤立したオレンジ色のディスクを作成します。適切
それぞれ-各ディスクをクリックして、ディスク、センター、半径、およびIDを識別するメッセージを端末に出力します。しかし、毎回私はすべてのディスクが発射され、ディスク上の用ピック・イベントをクリックします。どこが間違っていますか?
はここでここでプロット
です。ここ
コードがディスク1
をクリックの上に出力されます。from global_config import GC
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
class Disk:
def __init__(self, center, radius, myid = None, figure=None, axes_object=None):
"""
@ARGS
CENTER : Tuple of floats
RADIUS : Float
"""
self.center = center
self.radius = radius
self.fig = figure
self.ax = axes_object
self.myid = myid
def onpick(self,event):
print "You picked the disk ", self.myid, " with Center: ", self.center, " and Radius:", self.radius
def mpl_patch(self, diskcolor= 'orange'):
""" Return a Matplotlib patch of the object
"""
mypatch = mpl.patches.Circle(self.center, self.radius, facecolor = diskcolor, picker=1)
if self.fig != None:
self.fig.canvas.mpl_connect('pick_event', self.onpick) # Activate the object's method
return mypatch
def main():
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title('click on disks to print out a message')
disk_list = []
disk_list.append(Disk((0,0), 1.0, 1, fig, ax ) )
ax.add_patch(disk_list[-1].mpl_patch())
disk_list.append(Disk((3,3), 0.5, 2, fig, ax ) )
ax.add_patch(disk_list[-1].mpl_patch())
disk_list.append(Disk((4,9), 2.5, 3, fig, ax ) )
ax.add_patch(disk_list[-1].mpl_patch())
ax.set_ylim(-2, 10);
ax.set_xlim(-2, 10);
plt.show()
if __name__ == "__main__":
main()
はありがとうございました!それは完璧に働いた!そして私はその過程でPythonとMatplotlibについてもっと学びます。とても有難い。 – smilingbuddha