您的位置:首页 > 编程语言 > Python开发

利用Anaconda搭建python科学计算环境及交互图形操作示例

2014-05-19 16:52 771 查看
下载和安装Anaconda于
http://09c8d0b2229f813c1b93-c95ac804525aac4b6dba79b00b39d1d3.r79.cf1.rackcdn.com/Anaconda-1.9.2-Windows-x86_64.exe
编写如下程序,观察交互效果:

import numpy as np

import matplotlib.pyplot as plt

class DraggableRectangle:

    def __init__(self, rect):

        self.rect = rect

        self.press = None

    def connect(self):

        'connect to all the events we need'

        self.cidpress = self.rect.figure.canvas.mpl_connect(

            'button_press_event', self.on_press)

        self.cidrelease = self.rect.figure.canvas.mpl_connect(

            'button_release_event', self.on_release)

        self.cidmotion = self.rect.figure.canvas.mpl_connect(

            'motion_notify_event', self.on_motion)

    def on_press(self, event):

        'on button press we will see if the mouse is over us and store some data'

        if event.inaxes != self.rect.axes: return

        contains, attrd = self.rect.contains(event)

        if not contains: return

        print 'event contains', self.rect.xy

        x0, y0 = self.rect.xy

        self.press = x0, y0, event.xdata, event.ydata

    def on_motion(self, event):

        'on motion we will move the rect if the mouse is over us'

        if self.press is None: return

        if event.inaxes != self.rect.axes: return

        x0, y0, xpress, ypress = self.press

        dx = event.xdata - xpress

        dy = event.ydata - ypress

        #print 'x0=%f, xpress=%f, event.xdata=%f, dx=%f, x0+dx=%f'%(x0, xpress, event.xdata, dx, x0+dx)

        self.rect.set_x(x0+dx)

        self.rect.set_y(y0+dy)

        self.rect.figure.canvas.draw()

    def on_release(self, event):

        'on release we reset the press data'

        self.press = None

        self.rect.figure.canvas.draw()

    def disconnect(self):

        'disconnect all the stored connection ids'

        self.rect.figure.canvas.mpl_disconnect(self.cidpress)

        self.rect.figure.canvas.mpl_disconnect(self.cidrelease)

        self.rect.figure.canvas.mpl_disconnect(self.cidmotion)

fig = plt.figure()

ax = fig.add_subplot(111)

rects = ax.bar(range(10), 20*np.random.rand(10))

drs = []

for rect in rects:

    dr = DraggableRectangle(rect)

    dr.connect()

    drs.append(dr)

plt.show()

来源:http://matplotlib.org/1.3.1/users/event_handling.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: