我正在尝试理解在matplotlib中使用RectangleSelector。基本上我正在用imshow绘制一个2D数组,然后我想用鼠标选择一个矩形部分并保存矩形的角,以便稍后在脚本中使用。我在matplotlib文档中读取了RectangleSelector,但是我无法获取数据。 我现在所做的是以下
import matplotlib as mpl
import bumpy as np
from matplotlib.widgets import RectangleSelector
# let z be my 2D array
z=np.ones((100,1000))
def onselect(eclick, erelease):
'eclick and erelease are matplotlib events at press and release'
print ' startposition : (%f, %f)' % (eclick.xdata, eclick.ydata)
print ' endposition : (%f, %f)' % (erelease.xdata, erelease.ydata)
print ' used button : ', eclick.button
fig=mpl.pylab.figure()
ax=fig.add_subplot(111)
ax.imshow(z,aspect='auto',origin='lower',extent=((0,100,0,1000)))
toggle_selector.RS=RectangleSelector(ax,onselect,drawtype='box',useblit=True,button=[1,3])
现在使用onselect函数我打印出矩形最小值和最大值的(x,y)坐标值。但我想存储这些值以供以后使用。 我怎样才能做到这一点?
答案 0 :(得分:1)
我刚刚创建了几个全局变量,并在全局变量中存储了eclick.xdata,eclick.ydata,erelease.xdata和erelease.ydata的值。
def onselect(eclick, erelease):
global index
global startpos
global endpos
print ' startposition : (%f, %f)' % (eclick.xdata, eclick.ydata)
print ' endposition : (%f, %f)' % (erelease.xdata, erelease.ydata)
print ' used button : ', eclick.button
startpos[index] = [eclick.xdata, eclick.ydata]
endpos[index] = [erelease.xdata, erelease.ydata]
不确定它是否是最好的"方式,但它有效:)
答案 1 :(得分:0)
如果您仔细阅读文档,您会发现返回的对象具有范围,几何等属性,其中包含有关选择的所有信息。我迟到了3年,但希望它有所帮助。
答案 2 :(得分:0)
从Navdeep中添加答案的具体内容......
rect_selection_coords = toggle_selector.RS.extents
print(rect_selection_coords)
x1, x2, y1, y2 = rect_selection_coords
其他属性可以在source的github / matplotlib / lib / matplotlib / widgets.py第2296行找到。