我正在尝试修改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)
答案 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()