将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中的拖动和缩放点击区分开来 的相关文章

  • Pygame 让精灵按照给定的旋转行走

    很久以前我做了一个Scratch脚本 我想用Pygame将其转换为Python 有很多示例显示图像的旋转 但我想知道如何更改精灵的旋转以使其沿给定方向移动 而不更改图像 这是我的暂存代码 这是我的 Pygame 精灵类 class Star
  • 如何在python中确定过去的时区特定日期是否是夏令时?

    有没有办法检查特定时区在我指定的日期是否处于夏令时 test dt datetime year 2015 month 2 day 1 pst pytz timezone America Los Angeles test dt pst loc
  • 在Python中清理属于不同语言的文本

    我有一个文本集合 其中的句子要么完全是英语 印地语或马拉地语 每个句子附加的 id 为 0 1 2 分别代表文本的语言 无论任何语言的文本都可能有 HTML 标签 标点符号等 我可以使用下面的代码清理英语句子 import HTMLPars
  • 从 Spark 数据帧中过滤大量 ID

    我有一个大型数据框 其格式类似于 ID Cat date 12 A 201602 14 B 201601 19 A 201608 12 F 201605 11 G 201603 我需要根据大约 500 万个 Is 的列表来过滤行 最直接的方
  • 如何在python mechanize中设置cookie

    向服务器发送请求后 br open http xxxx br select form nr 0 br form MESSAGE 1 2 3 4 5 br submit 我得到了响应标题 其中包含 set cookie Set Cookie
  • 如何在每次运行 python 程序时添加新列

    我希望我的表的第一列作为卷号 第二列作为名称 每当我运行 python 程序时 我想在表中添加一列日期 在这个新列中 我想填充从 user list 获得的列表将包含值 P A P P 等 如何处理 我尝试首先通过 alter 命令添加一列
  • 多个列表和大小的所有可能排列

    在 python 中使用以下命令很容易计算简单的排列itertools permutations https docs python org 3 library itertools html itertools permutations 你
  • 如何不断地将 STDOUT 发送到我的 python TCP 服务器?

    我有简单的 python echo 服务器 它使用套接字 并向客户端回显随机数 我有另一个程序 每 2 秒将值打印到标准输出 如果它只是一个脚本 我可以像这样重定向 stdout python script py 并像这样在脚本中获取它da
  • Python 可选参数对

    我正在使用argparse模块获取两个可选的命令行参数 parser add argument start date nargs metavar START DATE help start date in YYYY MM DD parser
  • Python 中使用 globals() 的原因?

    Python 中有 globals 函数的原因是什么 它只返回全局变量的字典 这些变量已经是全局的 所以它们可以在任何地方使用 我只是出于好奇而问 试图学习Python def F global x x 1 def G print glob
  • python lxml 使用iterparse编辑并输出xml

    我已经在 lxml 库上摆弄了一段时间了 也许我没有正确理解它 或者我错过了一些东西 但我似乎无法弄清楚在捕获某个 xpath 后如何编辑文件并且然后能够在逐个元素解析时将其写回到 xml 中 假设我们有这个 xml 作为示例
  • 将带有 md5 消息摘要和 DESede/CBC/PKCS5Padding 的 3DES 加密的 java 代码转换为 python

    我有这个工作java代码 它使用3DES加密对密码进行加密 import java security MessageDigest import java util Arrays import java util Base64 import
  • 如何删除 pip 安装的所有软件包?

    如何从当前激活的虚拟环境中卸载 pip 安装的所有软件包 我发现这个片段作为替代解决方案 与重新创建 virtualenv 相比 删除库更加优雅 pip freeze xargs pip uninstall y 如果您通过 VCS 安装了软
  • Pandas 中的数据透视表小计

    我有以下数据 Employee Account Currency Amount Location Test 2 Basic USD 3000 Airport Test 2 Net USD 2000 Airport Test 1 Basic
  • 向结构化 numpy 数组添加字段

    将字段添加到结构化 numpy 数组的最简洁方法是什么 是否可以破坏性地完成 或者是否有必要创建一个新数组并复制现有字段 每个字段的内容是否连续存储在内存中 以便可以有效地完成此类复制 如果您使用 numpy 1 3 还有 numpy li
  • Django INSTALLED_APPS 的命名约定是如何工作的?

    该网站上的教程创建了一个名为 polls 的应用程序 它使用 django 1 9 所以在 INSTALLED APPS 中它是 polls apps PollsConfig 我正在观看一个教程 他将应用程序命名为新闻通讯 并且在 INST
  • python:xml.etree.ElementTree,删除“命名空间”

    我喜欢 ElementTree 解析 xml 的方式 特别是 Xpath 功能 我有一个带有嵌套标签的应用程序的 xml 输出 我想按名称访问此标签而不指定名称空间 这可能吗 例如 root findall molpro job 代替 ro
  • 访问影子 DOM 中的元素

    是否有可能查找 Shadow DOM 中的元素与蟒蛇硒 示例用例 我有这个input with type date
  • Django 按小时过滤

    我找到了那个链接 http code djangoproject com attachment ticket 8424 time filters diff http code djangoproject com attachment tic
  • 具有重复值的 Sqlite 列

    就说专栏吧aSQLite 数据库的非常重复 始终有相同的 4 个值 其他值可能稍后出现 但不同值的数量将少于 1000 个 VALUES hello world it s a shame to store this str many tim

随机推荐

  • 如何启用 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