【发布时间】:2016-05-26 21:49:31
【问题描述】:
我相信我没有正确使用 Matplotlib 的选择事件。在下面的代码中,我创建了三个不相交的橙色圆盘,它们具有指定的半径和由 id 号标识的位置。
我想单次-单击每个磁盘并向终端打印一条消息,标识磁盘、中心、半径和 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