点选择器event_handler绘制线并在matplotlib中显示坐标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点选择器event_handler绘制线并在matplotlib中显示坐标相关的知识,希望对你有一定的参考价值。

我有以下类通过y轴绘制一条垂直线,因此当我点击它时,会在该位置绘制一条水平线。我的目标是让y坐标实际打印在y轴上,水平线被绘制。为了测试,我试图用y-ccordinate打印标题,但它没有按预期工作。

我想要真正实现的是使条形图上的y轴可单击,以便用户可以在y轴上选择一个点,然后发生一堆“东西”(包括水平线的绘制) )。除了在y轴上画一条可绘制的垂直线以使其可以选择之外,我真的看不到其它方法可以实现这一点。这似乎相当笨拙,但我没有任何其他方法取得任何成功。

import matplotlib.pyplot as plt

class PointPicker(object):
    def __init__(self):

        self.fig = plt.figure()
        self.ax = self.fig.add_subplot(111)
        self.lines2d, = self.ax.plot((0, 0), (-6000, 10000), 'k-', linestyle='-',picker=5)

        self.fig.canvas.mpl_connect('pick_event', self.onpick)
        self.fig.canvas.mpl_connect('key_press_event', self.onpress)
        fig.canvas.mpl_connect('button_press_event', self.onclick)

    def onpress(self, event):
        """define some key press events"""
        if event.key.lower() == 'q':
            sys.exit()

    def onpick(self,event):
        x = event.mouseevent.xdata
        y = event.mouseevent.ydata
        L =  self.ax.axhline(y=y)
        print(y)
        ax.axvspan(0, 0, facecolor='y', alpha=0.5, picker=10)
        self.fig.canvas.draw()

    def onclick(event):
        self.fig.canvas.set_title('Selected item came from {}'.format(event.ydata))
        print(event.xdata, event.ydata)

if __name__ == '__main__':

    plt.ion()
    p = PointPicker()
    plt.show()

假设没有其他方法可以实现我的最终结果,这个方法一切都很好,除了我不能在我的生活中获得打印的标题(使用qazxsw poi)。

答案

您可以使用self.fig.canvas.set_title('Selected item came from {}'.format(event.ydata)连接到一个方法,该方法可以验证点击是否发生在离yaxis脊椎足够近的位置,然后使用单击的坐标绘制一条水平线。

'button_press_event'

import matplotlib.pyplot as plt class PointPicker(object): def __init__(self, ax, clicklim=0.05): self.fig=ax.figure self.ax = ax self.clicklim = clicklim self.horizontal_line = ax.axhline(y=.5, color='y', alpha=0.5) self.text = ax.text(0,0.5, "") print self.horizontal_line self.fig.canvas.mpl_connect('button_press_event', self.onclick) def onclick(self, event): if event.inaxes == self.ax: x = event.xdata y = event.ydata xlim0, xlim1 = ax.get_xlim() if x <= xlim0+(xlim1-xlim0)*self.clicklim: self.horizontal_line.set_ydata(y) self.text.set_text(str(y)) self.text.set_position((xlim0, y)) self.fig.canvas.draw() if __name__ == '__main__': fig = plt.figure() ax = fig.add_subplot(111) ax.bar([0,2,3,5],[4,5,1,3], color="#dddddd") p = PointPicker(ax) plt.show()

以上是关于点选择器event_handler绘制线并在matplotlib中显示坐标的主要内容,如果未能解决你的问题,请参考以下文章

在opencv Python中拖动鼠标绘制一条线并获取线的端点坐标

在地理配准图像上绘制连续线并获得GPS坐标

如何在模态中打开日期选择器?

JQuery在画布图像上画线并重置线而不影响图像

创建网格线并允许用户打开/关闭网格线视图

从多个 2D 点构造线并测量这些线之间的距离