将button_press_event与matplotlib中的拖动和缩放点击区分开来

2023-12-25

我有一个简单的代码,显示两个子图,并让用户在记录时左键单击第二个子图x,y这些点击的坐标。

问题是,单击选择要缩放的区域并拖动子图也被识别为左键单击。

有没有办法区分并过滤掉这些左键点击?

import numpy as np
import matplotlib.pyplot as plt


def onclick(event, ax):
    # Only clicks inside this axis are valid.
    if event.inaxes == ax:
        if event.button == 1:
            print(event.xdata, event.ydata)
            # Draw the click just made
            ax.scatter(event.xdata, event.ydata)
            ax.figure.canvas.draw()
        elif event.button == 2:
            # Do nothing
            print("scroll click")
        elif event.button == 3:
            # Do nothing
            print("right click")
        else:
            pass


fig, (ax1, ax2) = plt.subplots(1, 2)
# Plot some random scatter data
ax2.scatter(np.random.uniform(0., 10., 10), np.random.uniform(0., 10., 10))

fig.canvas.mpl_connect(
    'button_press_event', lambda event: onclick(event, ax2))
plt.show()

您可以检查先前移动鼠标后鼠标按钮是否被释放。由于对于缩放和平移,只有在之前没有发生任何移动时,您才可以调用该函数来绘制新点。

import numpy as np
import matplotlib.pyplot as plt

class Click():
    def __init__(self, ax, func, button=1):
        self.ax=ax
        self.func=func
        self.button=button
        self.press=False
        self.move = False
        self.c1=self.ax.figure.canvas.mpl_connect('button_press_event', self.onpress)
        self.c2=self.ax.figure.canvas.mpl_connect('button_release_event', self.onrelease)
        self.c3=self.ax.figure.canvas.mpl_connect('motion_notify_event', self.onmove)

    def onclick(self,event):
        if event.inaxes == self.ax:
            if event.button == self.button:
                self.func(event, self.ax)
    def onpress(self,event):
        self.press=True
    def onmove(self,event):
        if self.press:
            self.move=True
    def onrelease(self,event):
        if self.press and not self.move:
            self.onclick(event)
        self.press=False; self.move=False


def func(event, ax):
    print(event.xdata, event.ydata)
    ax.scatter(event.xdata, event.ydata)
    ax.figure.canvas.draw()

fig, (ax1, ax2) = plt.subplots(1, 2)
# Plot some random scatter data
ax2.scatter(np.random.uniform(0., 10., 10), np.random.uniform(0., 10., 10))
click = Click(ax2, func, button=1)
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将button_press_event与matplotlib中的拖动和缩放点击区分开来 的相关文章

  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 将 github 上的包安装到 Spyder 中

    我一直在尝试安装并导入mpl finance来自 github 的包 在我的 Spyder 环境中没有成功 我努力了 pip install e git https github com matplotlib mpl finance git
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • 如何将交互式 matplotlib 图形插入 tkinter 画布

    我正在尝试将交互式 matplotlib 图形 具有滑块 重置按钮和单选按钮的图形 放入 tkinter Canvas 中 我已成功添加非交互式图表 但当它变为交互式时找不到问题 我尝试将所有内容更改为使用 matplotlib Figur
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例

随机推荐

  • 如何启用 chromedriver 从 selenium webdriver 登录

    如何从 selenium webdriver 中启用 chromedriver 详细日志记录功能 我找到了合适的方法loggingTo and enableVerboseLogging但似乎无法正确使用它们 require chromedr
  • 我怎样才能用汇编语言(MIPS)做小于或等于的事情?

    我面前有 C 代码 我必须将其翻译成 MIPS 汇编语言 我并不是在寻找直接的答案 但我希望有人纠正我思考问题的方式 我面前的C代码是 x z lt y 我已经知道 x y 和 z 分别存储在寄存器中6 美元 7 美元 8 美元 问题是我无
  • 使用 ASP.NET MVC 4 从控制器调用另一个不同的视图

    我有一个带有提交按钮的视图 Index cshtml 单击提交按钮时 它会调用控制器 TestController cs 内的操作 Action01 因此在操作结束时 我想以自定义视图模型作为参数返回到调用者 Index cshtml 视图
  • 使用日期时间索引 pandas 更快地加载 csv

    我经常迭代存储在 csv 文件中的金融价格数据 当我完成与时间相关的所有分析时 就像使用 pandas 日期时间对象来子集和组织数据的可访问性一样 我的问题是 当我将文件读入计算机内存时 会打扰parse dates提供的参数顶部panda
  • 在树莓派上安装 libmp3lame 以使用 FFMPEG

    我在我的 RPi 2 上使用带有 python 3 2 的 moviepy 模块 它使用 FFMPEG 来读取和写入视频 所以我使用安装了 FFMPEGthese http hannes enjoys it blog 2016 03 ffm
  • 填充曲线和x轴之间的区域

    我试图使用 MatPlotLib 简单地填充 Python 中绘图曲线下的区域 这是我的 SSCCE import json import pprint import numpy as np import matplotlib pyplot
  • AngularJS 对包含 null 的列表进行排序

    我有一个范围对象 它有一个包含空值的列表 我想在两个方向上对该列表进行排序 但空值必须始终位于末尾 我可以很容易地做到这一点 方法是将对象分成 2 个 一个包含空值 一个不包含最后的空列表 但有没有更有效的方法来做到这一点呢 例子 1 nu
  • Nhibernate.Linq:使用Where(Expression>)限制查询结果

    我使用 NHibernate 查询数据库 现在我需要使用谓词限制选择的数据 到目前为止 我发现 Google 驱动的开发处于最佳状态 使用表达式和 NHibernate Linq 可以实现类似的功能 这是我尝试过的 public IList
  • VHDL乘法器

    library IEEE use IEEE STD LOGIC 1164 ALL entity Lab3 Adder1 is Port cin in STD LOGIC a in STD LOGIC VECTOR 3 downto 0 b
  • 可解码和 JSON,同一变量有 2 种数据类型

    我正在使用 Decodable 协议来解码一些 json 但遇到了一个问题 我得到了答案 其中如果没有向元素添加地理位置数据 则经度和纬度可以是整数 latitude 0 如果有地理数据 则可以是字符串 fx latitude 25 047
  • 是否应该在数据库级别处理唯一字段的验证?

    我正在为我的 BSc 项目编写一个相当大的 Web 应用程序 并使用 MySQL 用 PHP 编写它 创建 SQL 表时应该使用唯一字段吗 我之所以问这个问题是因为我正在将验证方法写入我的 PHP 中 例如 如果我想检查数据库中是否已存在电
  • 循环数组,打印索引和值

    我想做这样的事情 foo foo 0 bar foo 35 baz for i 0 i lt foo i do echo i foo i done Output 0 bar 1 然后我尝试使用 for in 循环它 foo foo 0 ba
  • 防止执行父文件夹的.htaccess

    例如 我在同一域上有两个不同的网站 根目录中的第一个站点http example com http example com 子文件夹中的第二个站点http example com site2 http example com site2 每
  • 如何使用cmake的target_link_libraries来链接与glob匹配的库?

    我已经预构建了第三方库 Boost 我想将其链接到我的目标 它们都存储在一个目录下 例如 BOOST PATH lib libboost thread a BOOST PATH lib libboost log a 等 所以我想做这样的事情
  • 构建 OpenCV 2.4.x 时出错“未定义对 av_opt_set@LIBAVUTIL_51 的引用”

    我尝试过构建 2 4 的所有版本 当 链接 CXX 可执行文件 bin opencv test core 时 它们都失败 usr local lib libavcodec so 54 undefined reference to av op
  • 谷歌地图 API v3 中信息窗口的大小。什么是正确的解决方案?

    我需要更改谷歌地图信息窗口的宽度和高度 我看到了这个主题Google Map InfoWindow 设置高度和宽度 https stackoverflow com questions 5858898 google map infowindo
  • Matlab - 矩阵求幂的尺寸不正确[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 假设我们有a 60 and B 60 我正在尝试计算这个面积 当我尝试这个时 W u 2 cot B v 2 cot a 8 我收
  • 如何使用 Selenium RC 检索表列中的文本?

    我有一个如下所示的表 table class theClass tr td class anotherClass strong Label1 strong td td Value1a br Value1b br Value1c td tr
  • 如何在列表上进行多次悬停

    好吧 所以我想知道如何在悬停时选择多个项目 例如当我将鼠标悬停在列表上时a强调a并在名单上b 给该列表框添加阴影 我尝试对其进行编码 但由于某种原因我无法实现多重悬停效果 CSS代码 a hover b background ccc HTM
  • 将button_press_event与matplotlib中的拖动和缩放点击区分开来

    我有一个简单的代码 显示两个子图 并让用户在记录时左键单击第二个子图x y这些点击的坐标 问题是 单击选择要缩放的区域并拖动子图也被识别为左键单击 有没有办法区分并过滤掉这些左键点击 import numpy as np import ma