访问def中的matplotlib图

时间:2014-02-10 18:45:02

标签: python matplotlib plot

我正在尝试修改matplotlib中mouseevent定义中的绘图。我的最终终点是能够让用户拖动一个标记起始和结束x坐标的灰色区域,我可以从中确定局部最大值/最小值。 这是我目前的地方。虽然第一个avxspan出现在情节中,但第二个没有出现。我知道因为x,y coords打印在控制台上而触发了mouseevent。有人能告诉我为什么这不起作用?非常感谢。

fig=plt.figure()
plt.figure(fig.number)
plt.plot(data)
ax=plt.gca()
plt.figtext(0.25,0.92, "Calculate")
plt.figtext(0.66,0.92, "Clear")
ax.axvspan(1, 100, facecolor='0.5', alpha=0.5)

def start(event):
    global ax
    ax.axvspan(100, 200, facecolor='0.5', alpha=0.5)
    print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
        event.button, event.x, event.y, event.xdata, event.ydata)

cid = fig.canvas.mpl_connect('button_press_event', start)
plt.show()
fig.canvas.mpl_disconnect(cid)    

2 个答案:

答案 0 :(得分:1)

您可能想看一下matplotlib.widgets模块。

一个简单的衬垫,可以拖动一个区域,并定义一个回调函数来获取跨越该区域的坐标。

简单的例子

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import SpanSelector

x = np.arange(10)
y = x**2

plt.plot(x,y)
ax=plt.gca()


def onselect(vmin, vmax):
    print vmin, vmax
span = SpanSelector(ax, onselect, 'horizontal')
plt.show() 

答案 1 :(得分:0)

致电fig.canvas.draw()更新数字:

def start(event):
    ax.axvspan(100, 200, facecolor='0.5', alpha=0.5)
    print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
        event.button, event.x, event.y, event.xdata, event.ydata)
    fig.canvas.draw()