点击绘图时绘制点的Python GUI?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了点击绘图时绘制点的Python GUI?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2259字,纯文字阅读大概需要4分钟。
内容图文
![点击绘图时绘制点的Python GUI?](/upload/InfoBanner/zyjiaocheng/786/bb32ad115a9147d7818c3b932fdc7d41.jpg)
首先尝试交互式绘图,欢迎任何帮助.
我正在尝试获得一个交互式matplotlib图,其中每次点击鼠标时都会绘制点.点将在点击位置和图像顶部绘制.我想我已经弄清楚如何做到这一点,但我想知道是否有一种简单的方法来添加“撤消”按钮,以便我可以删除最后绘制的点(如果需要).在同一条想法中,我还想添加“重置”(即删除所有点)和“保存”按钮.
from matplotlib import pyplot as plt
def onclick(event):
button=event.button
x=event.xdata
y=event.ydata
if button==1: plt.plot(x,y,'ro')
if button!=1: plt.plot(x,y,'bo')
print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
event.button, event.x, event.y, event.xdata, event.ydata)
im = plt.imread('Picture1.png')
fig, ax=plt.subplots()
ax.imshow(im)
ax.autoscale(False)
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()
解决方法:
你只需要编写逻辑来做到这一点.这是我使用的东西的略微修改版本(并且只维护一个列表)但是应该很容易扩展它以做你想要的.
class clicker_class(object):
def __init__(self, ax, pix_err=1):
self.canvas = ax.get_figure().canvas
self.cid = None
self.pt_lst = []
self.pt_plot = ax.plot([], [], marker='o',
linestyle='none', zorder=5)[0]
self.pix_err = pix_err
self.connect_sf()
def set_visible(self, visible):
'''sets if the curves are visible '''
self.pt_plot.set_visible(visible)
def clear(self):
'''Clears the points'''
self.pt_lst = []
self.redraw()
def connect_sf(self):
if self.cid is None:
self.cid = self.canvas.mpl_connect('button_press_event',
self.click_event)
def disconnect_sf(self):
if self.cid is not None:
self.canvas.mpl_disconnect(self.cid)
self.cid = None
def click_event(self, event):
''' Extracts locations from the user'''
if event.key == 'shift':
self.pt_lst = []
return
if event.xdata is None or event.ydata is None:
return
if event.button == 1:
self.pt_lst.append((event.xdata, event.ydata))
elif event.button == 3:
self.remove_pt((event.xdata, event.ydata))
self.redraw()
def remove_pt(self, loc):
if len(self.pt_lst) > 0:
self.pt_lst.pop(np.argmin(map(lambda x:
np.sqrt((x[0] - loc[0]) ** 2 +
(x[1] - loc[1]) ** 2),
self.pt_lst)))
def redraw(self):
if len(self.pt_lst) > 0:
x, y = zip(*self.pt_lst)
else:
x, y = [], []
self.pt_plot.set_xdata(x)
self.pt_plot.set_ydata(y)
self.canvas.draw()
def return_points(self):
'''Returns the clicked points in the format the rest of the
code expects'''
return np.vstack(self.pt_lst).T
ax = gca()
cc = clicker_class(ax)
内容总结
以上是互联网集市为您收集整理的点击绘图时绘制点的Python GUI?全部内容,希望文章能够帮你解决点击绘图时绘制点的Python GUI?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。