matplotlib 中的交互线

2024-01-19

我正在尝试使用 matplotlib 制作一个交互式绘图,该绘图创建一个端点处带有两个句柄的线段。您可以单击并拖动手柄,线条将刷新以匹配以此方式指定的位置,与此 matplotlib 示例类似多编辑器 http://matplotlib.org/examples/event_handling/poly_editor.html:(如果你看到这个例子,想象一下我想要同样的东西,但只有多边形的一条边)。

我尝试更改 poly_editor 代码以仅使用 Line2D 元素,并且我的程序运行时没有任何错误,只是它根本不在轴上绘制任何内容。我认为这可能是变量范围内的错误,或者与 matplotlib 的绘制调用有关。任何关于错误是什么的指导将不胜感激。

编辑:我进一步进行了一些改进,简化了代码,现在我可以让它绘制线条并打印 epsilon 距离内最近顶点的索引,但线条保持静止并且不会产生动画。更新后的代码如下

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.lines import Line2D

class LineBuilder(object):

    epsilon = 0.5

    def __init__(self, line):
        canvas = line.figure.canvas
        self.canvas = canvas
        self.line = line
        self.axes = line.axes
        self.xs = list(line.get_xdata())
        self.ys = list(line.get_ydata())
    
        self.ind = None
    
        canvas.mpl_connect('button_press_event', self.button_press_callback)
        canvas.mpl_connect('button_release_event', self.button_release_callback)
        canvas.mpl_connect('motion_notify_event', self.motion_notify_callback)

    def get_ind(self, event):
        x = np.array(self.line.get_xdata())
        y = np.array(self.line.get_ydata())
        d = np.sqrt((x-event.xdata)**2 + (y - event.ydata)**2)
        if min(d) > self.epsilon:
            return None
        if d[0] < d[1]:
            return 0
        else:
            return 1

    def button_press_callback(self, event):
        if event.button != 1:
            return
        self.ind = self.get_ind(event)
        print(self.ind)
    
        self.line.set_animated(True)
        self.canvas.draw()
        self.background = self.canvas.copy_from_bbox(self.line.axes.bbox)
    
        self.axes.draw_artist(self.line)
        self.canvas.blit(self.axes.bbox)

    def button_release_callback(self, event):
        if event.button != 1:
            return
        self.ind = None
        self.line.set_animated(False)
        self.background = None
        self.line.figure.canvas.draw()

    def motion_notify_callback(self, event):
        if event.inaxes != self.line.axes:
            return
        if event.button != 1:
            return
        if self.ind is None:
            return
        self.xs[self.ind] = event.xdata
        self.ys[self.ind] = event.ydata
        self.line.set_data(self.xs, self.ys)
    
        self.canvas.restore_region(self.background)
        self.axes.draw_artist(self.line)
        self.canvas.blit(self.axes.bbox)


if __name__ == '__main__':
    fig, ax = plt.subplots()
    line = Line2D([0,1], [0,1], marker='o', markerfacecolor='red')
    ax.add_line(line)

    linebuilder = LineBuilder(line)

    ax.set_title('click to create lines')
    ax.set_xlim(-2,2)
    ax.set_ylim(-2,2)
    plt.show()

预先感谢,凯文。


好吧,我解决了问题。新代码(上面)实际上可以工作,但其中有一个错误。运动通知事件的 mpl_connect 调用的事件类型错误,但现在它按预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matplotlib 中的交互线 的相关文章

  • 为什么我的 jupyter 笔记本中不需要“%matplotlib inline”?

    我只是想理解为什么我的 jupyter 安装不需要我运行 matplotlib inline 根据我读过的所有内容 我应该运行它才能将我的绘图内联到我的 jupyter 笔记本中 但事实是 无论我是否运行 matplotlib inline
  • 在类中设置默认值

    我正在用 Python 创建一个类 但我不确定如何正确设置默认值 我的目标是为所有类实例设置默认值 也可以通过类方法对其进行修改 但是 我希望在调用方法后恢复初始默认值 我已经能够使用下面所示的代码使其工作 它不是很 漂亮 所以我怀疑这是解
  • 在 GUI 中显示 DHT11 的温度 - 自动刷新?

    Python 新手 开始接触 DHT11 温度 湿度传感器 Raspberry Pi 3 和 Python 3 我正在使用标准Adafruit DHT11 库 https github com adafruit Adafruit Pytho
  • 倒计时:01:05

    如何在 Python 中创建一个看起来像 00 00 分钟和秒 的倒计时时钟 它独立成一行 每次减少一actual秒 则应将旧计时器替换为低一秒的新计时器 01 00变成00 59它实际上击中了00 00 这是我开始使用但想要改造的基本计时
  • 如何使用Python中的or-tools解决累积旅行商问题?

    累积旅行商问题 CTSP 的目标是最小化到达客户的时间总和 而不是总旅行时间 这与最小化总旅行时间不同 例如 如果一个人拥有无限的车辆 车辆与位置数量相同 并且目标是最大限度地减少到达位置的总时间 则可以为每个位置发送一辆车 因为这是满足所
  • Python NameError,变量“未定义”

    它返回的错误是 NameError name lives is not defined 我知道代码并不是尽可能高效 这是我的第一个项目 但是无论我尝试做什么 都会弹出这个错误 我尝试为其创建一个全局变量 但这没有帮助 我真的很感激一些帮助
  • TensorFlow 运算符重载

    有什么区别 tf add x y and x y 在 TensorFlow 中 当您使用以下命令构建图表时 您的计算图表会有什么不同 代替tf add 更一般地说 有 或者其他张量超载的操作 如果至少有一个x or y is a tf Te
  • 这个 Python 字符串切片语句中的两个冒号的用途是什么?

    例如 str hello str 1 3 我在 Python 文档中哪里可以找到它 in 序列描述 http docs python org library stdtypes html index 510 s i j k slice of
  • 如何定期向数组添加新元素,使其出现在每 500 个元素之后?

    如果我有一个包含 500k 个元素 仅限数字 的数组 列 我如何能够在每 500 个元素之后添加一个新元素 新的数字应该是相邻元素的平均值 例如 在元素 499 和 500 之间有一个值为 499 的值 500 的值 2 的新元素 依此类推
  • 如何在 conda 中从一个文件安装多个包而不创建新环境?

    我从当前环境缺少的包的 yml 文件中获取了这些 我如何在当前环境中安装这些 channels defaults dependencies appdirs 1 4 3 py36h28b3542 0 asn1crypto 0 24 0 py3
  • 是否有像 python 的 issubclass 这样的东西,如果第一个参数不是类,它将返回 False?

    我想要issubclass 1 str 返回 false 1不是 的子类str 因为它根本不是一个类 所以我收到了 TypeError 有没有一个好的方法来测试这个而不诉诸try except try if issubclass value
  • 检查空查询集

    我想确认这是否是检查空查询集的正确方法 如果这就是为什么我会遇到 UNIQUE 约束错误 syn check Synonym objects filter MD objects get filter dict synonym type St
  • Tensorflow“feed_dict”:对键值对使用相同的符号得到“TypeError:无法将 feed_dict 键解释为张量”

    我正在使用构建线性回归的 Tensorflow 示例 我的代码如下 import numpy as np import tensorflow as tf train X np asarray 3 3 4 4 5 5 6 71 6 93 4
  • 如何使用包含 \n 的 .txt 创建一维列表?

    我想读取一个文本文件并将文件的每个元素放入一个列表中 而不是为文件中的每一行都有一个单独的列表 例如 如果文件是 你好我的名字 Is Joe 我希望列表是 你好 我的名字是 Joe 而不是 你好 我的名字 是乔 这是我到目前为止所拥有的 d
  • 找出段落中出现的单词

    sentence Alice was not a bit hurt and she jumped up on to her feet in a moment words Alice jumped played 我可以使用filterpyth
  • Django 模型表单中的必填字段

    我有一个表格 当我也不想要它们时 会根据需要显示几个字段 这是来自 models py 的表格 class CircuitForm ModelForm class Meta model Circuit exclude lastPaged d
  • 标记 pandas 系列中连续的 True 元素组

    我有一系列的 pandas 布尔值 我想标记连续的 True 值组 怎么可能做到这一点 是否可以以矢量化的方式做到这一点 任何帮助将不胜感激 Data A 0 False 1 True 2 True 3 True 4 False 5 Fal
  • Python Flask 不更新图像[重复]

    这个问题在这里已经有答案了 这里有一些关于图像的 Flask 问题 但没有一个能解决我的问题 我有一个应用程序可以创建图像 保存它 然后显示它 一次 它应该多次执行此操作 每次更改图像时 它应该加载新图像 它不是 它只显示与其显示的文件名关
  • openpyxl:为一系列 Excel 单元格分配值或应用格式而不进行迭代

    我想应用特定格式或为一系列 Excel 单元格分配一个值 而不需要迭代每个单元格 我目前正在使用这个脚本 from openpyxl import Workbook from openpyxl styles import Font wb W
  • 检查数组中是否有 3 个连续值高于某个阈值

    假设我有一个像这样的 np array a 1 3 4 5 60 43 53 4 46 54 56 78 有没有一种快速方法来获取 3 个连续数字都高于某个阈值的所有位置的索引 也就是说 对于某个阈值th 得到所有x其中 a x gt th

随机推荐

  • Java模板函数

    我有一个函数有时必须返回一个Date其他时候DateTime 乔达时间 static public
  • 设备重启后地理围栏在 Android 中保持活动状态吗

    我正在编写一个应用程序 当有人在安装的应用程序的生命周期内进入 退出多个站点时 需要使用地理围栏 当我第一次安装应用程序时 我的地理围栏实现 与下面的第二个链接非常相 似 一切正常 无论是移入 移出地理围栏时还是使用模拟位置来模拟它时 直到
  • Halide 与 C 布局 numpy 数组

    我开始使用 Halide 并在 Python 环境中使用它 在该 Python 环境中 数据作为 Numpy 数组传递 它实际上是其他地方定义的 C 数组的别名 但是 当我使用调用 Halide 函数时 出现错误 Constraint vi
  • 使用 python 运行时,Flask 调试模式给出“OSError: [Errno 8] Exec format error”

    所以 这是我制作的一个文件 flaskblog py from flask import Flask app Flask name app route def hello return h1 Home Page h1 这是我第一次运行它的方
  • 仿真给出了正常 for 循环与并行 For 的不同结果

    当我尝试使用普通 for 循环 这是正确的结果 与 Parallel For 时 我对一个简单模拟示例的不同结果感到有点惊讶 请帮我找出可能是什么原因 我观察到 与正常情况相比 并行执行速度非常快 using System using Sy
  • C语言中总线:错误10是什么意思

    下面是我的代码 import
  • div 上的 CSS 不透明度随着时间延迟而不是用户交互而变化

    我正在尝试在 div 中设置一个图像 该图像将在 5 秒内缓慢出现 不透明度从 0 到 1 我有这个代码 fadeDivIn opacity 1 transition opacity 5s ease in moz transition op
  • 我应该预先分配一个 numpy 数组吗?

    我有一个类及其方法 该方法在执行过程中会重复多次 该方法使用一个numpy数组作为临时缓冲区 我不需要在方法调用之间将值存储在缓冲区内 我是否应该创建数组的成员实例以避免方法执行期间内存分配的时间泄漏 我知道最好使用局部变量 但是 Pyth
  • Webgl:写入 gl_FragDepth 的替代方法

    在WebGL中 是否可以写入片段的深度值或以其他方式控制片段的深度值 据我所知 gl FragDepth 不存在于 webgl 1 x 中 但我想知道是否有其他方法 扩展 浏览器特定支持等 来做到这一点 我想要归档的是让光线追踪对象与使用通
  • 如何从 sql server 2012 中删除拥有架构的用户

    我在 Sql Server 2012 中创建了一个新用户 并且 意外地 将他们标记为多个架构的所有者 我本想将它们标记为架构的成员 但我在错误的选项卡上 因为他们现在是架构的所有者 所以我无法取消选择所有权 也无法删除用户 我怎样才能挽回我
  • 如何在 mapstruct 中使用来自不同类的另一个映射

    我想将模型对象映射到 dto 模型 我已经拥有其中一个对象的映射器 如何在另一个类中的另一个映射器中重用此映射器 我有以下模型 Getter AllArgsConstructor ToString public class History
  • 使用更改源时,有没有办法获取 PouchDB 中文档的所有修订?

    我现在正在摆弄 PouchDB 我使用它作为本地存储数据的一种方式 而不将其链接到 CouchDB 我一直在尝试做的是为单个文档创建一个恢复 撤消方法 为此 我想使用 doc 的先前修订版 我在阅读 PouchDB 文档时遇到了更改提要 起
  • 将鼠标悬停在信息框上会在其后面的标记上触发悬停事件

    我目前正在使用 Google 地图的 InfoBox 插件 不幸的是 我遇到了一个恼人的问题 我的应用程序上的用户可以通过将鼠标悬停在相应的标记上来打开信息框 效果很好 当信息框打开并且用户将鼠标悬停在其上时 会出现此问题 由于某种原因 标
  • 使用 React 上传多个图像

    我想先通过预览来上传多张图像 然后提交以发送它们 我遇到过这样的情况 TypeError Cannot read property files of null 它还只允许我上传一张图像 我创造了files 作为在提交之前安装图像以供审核的方
  • Windows 7下如何设置进程超时?

    我想使用 Windows 批处理文件启动一个程序 但程序应该在一定的超时值后停止 例如 运行程序60秒 60秒后停止 Linux下有这个不错的timeout命令做我想做的事 Windows 也有一个timeout命令 但它只是暂停命令 延迟
  • 生成不重复的随机数。C# [重复]

    这个问题在这里已经有答案了 大家好 我试图在 C 的同一行上生成 6 个不同的数字 但我面临的问题是有些数字在同一行上重复 这是我的代码 var rand new Random List
  • 在 Mercurial 中,如何将反向补丁应用于特定文件?

    相关Mercurial 在一个存储库中的分支之间合并一个文件 https stackoverflow com questions 1078881 mercurial merging one file between branches in
  • 在 iPhone 应用程序中使用 CoreGraphic 描边作为 Alpha 遮罩

    我基本上希望为不同的目的创建类似于 iSteam iFog alebit 的非常简单版本的东西 实际上 将有两个图像 一个是主题图像 另一个是凝结图像或类似图像 然后 用户可以在屏幕上擦拭手指 它将从顶层 剪切 以显示下层 到目前为止 我已
  • 如何在IntelliJ IDEA中查看JDK外部文档?

    此操作的快捷方式是 Shift F1 但它始终呈灰色 即使我已指出 JDKdocumentation path to the docs文件夹 docs 文件夹解压自jdk 7u2 apidocs zip http www oracle co
  • matplotlib 中的交互线

    我正在尝试使用 matplotlib 制作一个交互式绘图 该绘图创建一个端点处带有两个句柄的线段 您可以单击并拖动手柄 线条将刷新以匹配以此方式指定的位置 与此 matplotlib 示例类似多编辑器 http matplotlib org