Matplotlib - 高级事件选择

时间:2017-12-10 18:25:23

标签: python events matplotlib

我目前正在使用一个小的交互式 matplotlib 脚本,我想用它来标记图像中的不同事件。

为了使其更灵活,我想以一种方式创建它,我可以通过鼠标单击来选择事件(并且稍微改变我的光标的画笔大小,即相邻点的数量 - 选中)多边形内的

到目前为止,我设法通过左键单击并在我的绘图中绘制折线来为我选择的事件更改画笔大小

from matplotlib import pyplot as plt
%matplotlib notebook


points = []
bs = 5 #brush size


def onclick(event):
    global points
    points.append([event.xdata, event.ydata])

    if bs == 1:
        ax.plot(event.xdata+bs, event.ydata+bs,'b+')
    elif bs == 3:
        ax.plot(event.xdata, event.ydata+1,'b+')
        ax.plot(event.xdata, event.ydata-1,'b+')
        ax.plot(event.xdata+1, event.ydata,'b+')
    ax.plot(event.xdata-1, event.ydata,'b+')
    ax.plot(event.xdata, event.ydata,'b+')
    elif bs == 5:
        ax.plot(event.xdata, event.ydata+1,'b+')
        ax.plot(event.xdata, event.ydata-1,'b+')
        ax.plot(event.xdata+1, event.ydata,'b+')
        ax.plot(event.xdata-1, event.ydata,'b+')
        ax.plot(event.xdata, event.ydata,'b+')
        ax.plot(event.xdata, event.ydata+2,'b+')
        ax.plot(event.xdata, event.ydata-2,'b+')
        ax.plot(event.xdata+2, event.ydata,'b+')
        ax.plot(event.xdata-2, event.ydata,'b+')
        ax.plot(event.xdata+1, event.ydata+1,'b+')
        ax.plot(event.xdata-1, event.ydata-1,'b+')
        ax.plot(event.xdata+1, event.ydata-1,'b+')
        ax.plot(event.xdata-1, event.ydata+1,'b+')



    plt.draw()


class LineBuilder:
    def __init__(self, line):

        self.line = line
        self.xs = list(line.get_xdata())
        self.ys = list(line.get_ydata())
        self.cid = line.figure.canvas.mpl_connect('button_press_event',self)
        #self.cid = line.figure.canvas.mpl_connect('key_press_event', self)


    def __call__(self, event):
        #print('click', event)
        if event.inaxes!=self.line.axes: return
        self.xs.append(event.xdata)
        self.ys.append(event.ydata)
        self.line.set_data(self.xs, self.ys)
        self.line.figure.canvas.draw()
        return self



fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title(('click to build line segments. brush size %d; press button to paint') % bs)
line, = ax.plot(points, 'r+--')
linebuilder = LineBuilder(line)

plt.gcf().canvas.mpl_connect('key_press_event', onclick)

ax.set_xlim((0, 10))
ax.set_ylim((0, 10))
plt.show()
  1. matplotlib 是否可以通过按热键在存储各个选择的X / Y坐标的列表之间切换?
  2. matlablib 是否支持对我的折线内的事件进行自动操作?
  3. 我可以通过等同于 CTRL-Z 或橡皮擦的东西删除已挑选的事件吗?
  4. 非常感谢提前!

0 个答案:

没有答案