我可以更改之前创建的 matplotlib FuncAnimation 的间隔吗?

2023-11-29

我试图弄清楚是否有任何方法可以更改现有 matplotlib FuncAnimation 的间隔。我希望能够根据用户输入调整动画的速度。

我发现了类似的问题如何更改帧之间的间隔(python)?,但既然没有得到答案,我想我还是会问它。

我需要和拥有的一个最小的例子是:

"""
Based on Matplotlib Animation Example

author: Jake Vanderplas
https://stackoverflow.com/questions/35658472/animating-a-moving-dot
"""
from matplotlib import pyplot as plt
from matplotlib import animation
import Tkinter as tk
import numpy as np

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg


class AnimationWindow(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        self.fig = plt.figure(0, figsize=(10, 10))

        self.anim = None

        self.speed = 2

        self.canvas = FigureCanvasTkAgg(self.fig, self)
        self.canvas.show()
        self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
        self.canvas.mpl_connect('resize_event', self.on_resize)

        self.bar = tk.Scale(self, from_=0.25, to=10, resolution=0.25, command=self.change_play_speed, orient=tk.HORIZONTAL)
        self.bar.pack(fill=tk.X)

    def start_animation(self):
        ax = plt.axes()

        self.x = np.arange(0, 2 * np.pi, 0.01)
        self.line, = ax.plot(self.x, np.sin(self.x))

        # The return needs to be assigned to a variable in order to prevent the cleaning by the GC
        self.anim = animation.FuncAnimation(self.fig, self.animation_update, frames=100,
                                            interval=100/self.speed, blit=True, repeat=False)

    def animation_update(self, i):
        self.line.set_ydata(np.sin(self.x + i / 10.0))  # update the data
        return self.line,

        return tuple(self.annotation)

    def change_play_speed(self, speed):
        self.speed = float(speed)

        # This works but I think somehow the previous animation remains
        #self.anim = animation.FuncAnimation(self.fig, self.animation_update, frames=100, interval=100/self.speed, blit=True, repeat=False)

    def on_resize(self, event):
        """This function runs when the window is resized.
         It's used to clear the previous points from the animation which remain after resizing the windows."""

        plt.cla()


def main():
    root = tk.Tk()

    rw = AnimationWindow(root)
    rw.pack()

    rw.start_animation()

    root.mainloop()

if __name__ == '__main__':
    main()

在更改速度功能中,我有一个针对此问题的注释解决方案。这个解决方案存在两个主要问题:它很可能非常低效(我认为);而且我还没有找到删除先前导致闪烁的动画的方法。


我不建议删除动画。对于更复杂的动画,一种选择当然是手动对其进行编程。使用重复调用更新函数的计时器实际上并不比创建FuncAnimation.

然而在这种情况下,解决方案非常简单。只需更改标的的间隔即可event_source:

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

我可以更改之前创建的 matplotlib FuncAnimation 的间隔吗? 的相关文章

  • Python Nose 导入错误

    我似乎无法理解鼻子测试框架 https nose readthedocs org en latest 识别文件结构中测试脚本下方的模块 我已经设置了演示该问题的最简单的示例 下面我会解释一下 这是包文件结构 init py foo py t
  • 底图上的子图

    我有一张英国地图和 121 个地点 每个地点有 3 个值 我想绘制 121 个位置中每个位置的三个值的小条形图 目前 这些值绘制为markersize属性 看起来像这样 密集恐惧症情节 https i stack imgur com 5fv
  • 为什么 tkinter / window.update 在我的程序中随着时间的推移变得更慢?

    我发现当我调用 window update 时 当向窗口写入的内容较少时 它的运行速度会更快 但后来 当我向窗口写入更多元素时 window update 需要更长的时间 请参阅下面的我的代码 您可以看到它在更新窗口之前一次向屏幕 100
  • Python + PostgreSQL + 奇怪的ascii = UTF8编码错误

    我有包含字符的 ascii 字符串 x80 代表欧元符号 gt gt gt print x80 当将包含该字符的字符串数据插入数据库时 我得到 psycopg2 DataError invalid byte sequence for enc
  • 将 API 数据存储到 DataFrame 中

    我正在运行 Python 脚本来从 Interactive Brokers API 收集金融市场数据 连接到API后 终端打印出请求的历史数据 如何将数据保存到数据帧中而不是在终端中流式传输 from ibapi wrapper impor
  • conda 无法从 yml 创建环境

    我尝试运行下面的代码来从 YAML 文件创建虚拟 Python 环境 我在 Ubuntu 服务器上的命令行中运行代码 虚拟环境名为 py36 当我运行下面的代码时 我收到下面的消息 环境也没有被创建 这个问题是因为我有几个必须使用 pip
  • 字典中的列表,Python 中的循环

    我有以下代码 TYPES hotmail type hotmail lookup mixed dkim no signatures S Return Path email protected cdn cgi l email protecti
  • 用Python中的嵌套for循环替换重复的if语句?

    在我编写的下面的代码中 n 4 所以有五个 if 语句 所以如果我想将 n 增加到 比如说 10 那么就会有很多 if 语句 因此我的问题是 如何用更优雅的东西替换所有 if 语句 n p 4 5 number of trials prob
  • 如何使用 Pandas 将巨大的 CSV 转换为 SQLite?

    我有一个巨大的表 大约 60 GB 采用存档的 CSV 文件形式 我想将其转换为 SQLite 文件 我现在所做的事情如下 import pandas import sqlite3 cnx sqlite3 connect db sqlite
  • pip 安装软件包两次

    不幸的是我无法重现它 但我们已经见过几次了 pip 将一个软件包安装两次 如果卸载第一个 第二个就会可见并且也可以被卸载 我的问题 如果一个包安装了两次 如何用 python 检查 背景 我想编写一个测试来检查这一点 devOp Updat
  • Python正则表达式从字符串中获取浮点数

    我正在使用正则表达式来解析字符串中的浮点数 re findall a zA Z d d t 是我使用的代码 这段代码有问题 如果数字和任何字符之间没有空格 则不会解析该数字 例如 0 1 2 3 4 5 6 7 8 9 的预期输出为 0 1
  • 一起使用 Flask 和 Tornado?

    我是以下的忠实粉丝Flask 部分是因为它很简单 部分是因为它有很多扩展 http flask pocoo org extensions 然而 Flask 是为了在 WSGI 环境中使用而设计的 而 WSGI 不是非阻塞的 所以 我相信 它
  • 求解不等式系统时“多项式错误:仅允许使用单变量多项式”

    我想找到以下两个常数的区间cons1 and cons2我写了下面的代码 from sympy import Poly from sympy import Abs from sympy solvers inequalities import
  • 从 IMDbPy 结果中的片目中获取电影 ID

    我正在尝试创建一个数据集 允许我根据 Python IMDb API 中的演员 ID 和电影 ID 加入演员和电影 现在 我正在尝试从演员的电影作品中提取电影 ID 列表 但无法做到 例如 我知道 Rodney Dangerfield 在
  • 如何向 SCons 构建添加预处理和后处理操作?

    我正在尝试在使用 SCons 构建项目时添加预处理和后处理操作 SConstruct 和 SConscript 文件位于项目的顶部 预处理动作 生成代码 通过调用不同的工具 gt 不知道在此预处理之后将生成的确切文件 可以创建用于决定生成哪
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • 如何使用Featuretools按列值从单个数据框中的多个列创建特征?

    我正在尝试根据之前的结果来预测足球比赛的结果 我在 Windows 上运行 Python 3 6 并使用 Featuretools 0 4 1 假设我有以下代表结果历史记录的数据框 原始数据框 https i stack imgur com
  • scipysolve_ivp() 中的访问时间步长

    我有一个常微分方程系统 正在使用 scipy 的solve ivp 函数求解 它运行良好 但我在访问每个步骤中使用的时间步时遇到问题 我知道solve ivp 将当前时间传递给用户定义的函数 但我需要使用的时间步长 而不是当前时间 为了解决
  • Python 枚举子集迭代

    我想迭代以下枚举的子集 class Items enum Enum item1 0 item2 1 item3 2 item4 3 item5 4 item6 5 item7 6 item8 7 说我想 for item in Items
  • 为什么用字符串和时间增量转置 DataFrame 会转换数据类型?

    这种行为对我来说似乎很奇怪 id列 字符串 在转置后转换为时间戳df如果另一列是时间增量 import pandas as pd df pd DataFrame id 00115 01222 32333 val 12 14 170 df v

随机推荐

  • Django auth:在哪里放置自定义模板?

    我想使用 Django 1 9 设置用户身份验证 如文档中所述 我将 auth 视图包含在我的项目中urls py like urlpatterns url accounts include django contrib auth urls
  • 如何将两个不同存储库的两个分支合并到一个存储库中?

    我的 Git 存储库的结构如下所示 A B C D E F master branch in separate repo1 A B C D E G H master branch in separate repo2 A H 是简单的提交 正
  • Python/sqlite:获取新插入行的PK

    我正在使用原始 SQL 插入一行 并且需要获取新插入行的主键 我不能假设任何非 PK 插入的数据是唯一的 也不能假设该行是最后插入的行 如果无法使用原始 SQL 那么使用 常规 插入怎么样 我想我必须完全创建一个新的 customID 字段
  • 从php中的for循环推送关联数组

    for 循环应该循环 10 次 当我刚刚打印 fname lname and email我正在获取 10 条数据 工作正常 但我需要将这些值存储在关联数组中 assocDataArray array foreach data as key
  • 如何设置数字样式?

    我正在尝试改变数字的样式 我想在每 3 位数字之间添加一些空格 我会确切地知道这些数字在 html 中的位置 当我从 html 检索号码时 它需要与我输入的号码完全相同 所以我只想设计数字的样式 不修改号码 我可以使用 javascript
  • 当 python 列表迭代是或不是引用时

    有人可以对这两个Python操作在修改列表方面的区别提供一个简洁的解释吗 demo a b c for d in demo d print demo output a b c for c in range len demo demo c p
  • 抑制函数的命令窗口输出

    我正在使用的一个功能有display 在其中 或在命令窗口上显示消息的其他内容 因此当我运行代码时 它会在命令行上输出很多内容 x 1200 这使得事情很难跟踪和观察 有没有办法抑制这个特定函数的输出 用分号结束语句显然没有帮助 您可以尝试
  • 如何纠正 fortify 给出的路径操作错误?

    我需要读取保存在 user home 文件夹中的属性文件 PropsFile System getProperty user home System getProperty file separator x properties Forti
  • 构建 INSERT 语句值的动态列表

    我正在编写一个存储过程来创建一组DELETE管理员针对数据库运行的语句 作为 回滚 解决方案的一部分 我希望对于要删除的每一行 还分别创建一个相应的INSERT语句 以便运行脚本的人希望撤消 他们可以简单地对数据库运行插入语句 我的问题是
  • 使用 JSON 和 AFNetworking NSDictionary 用数据填充表视图

    c ios n00b 在这里 我已经研究这个问题三天了 我担心我缺少一个基本概念 我已经研究并完成了与此相关的每个教程和堆栈溢出问题 但我无法得到答案 我正在尝试使用 json 文件中的数据填充我的 tableviewcontroller
  • poi读取现有的excel并用大数据进行编辑

    我使用 apache poi 来读取和写入 excel 我可以毫无问题地做到这一点 但是在现有 excel 上写入大型 excel 时 我面临内存问题 下面更详细地解释 我有一个模板 其中列标题是彩色的 有些是合并的 我说的是一张纸中的 1
  • 在地址“0xXXXXXX”处中断,没有可用的调试信息,或在程序代码之外

    配置 使用 Nucleo L476RG 使用 GNU ARM Eclipse 我从 STM32CubeMX 生成了一个极简代码 我已经在我的板载 ST Link 中刷新了 J link 驱动程序 一直在尝试为我的代码运行调试器 但我的程序计
  • Android Studio - 创建模块而不复制文件?

    我正在 Android Studio 中创建具有依赖项的项目 我知道如何通过添加模块来链接项目 但我意识到 导入模块 会在项目内创建 libProject 的副本 有办法防止这种情况吗 就像 外部模块 由于我负责这两个项目 因此我希望能够将
  • Ajax 联系表单问题 - 未发送电子邮件

    抱歉我是个菜鸟 但我正在尽力 我已经完成并阅读了我能找到的所有内容 但我从未让它发挥作用 非常感谢您的帮助 表单 ID 在 html 和 javascript 中匹配 PHP 链接在 Javascript 中 我将 javascript 链
  • 选择GUI时如何去除黑色边框?

    我正在尝试添加一个Entry小部件到Frame with a Scrollbar 当我点击 GUI 时 会出现黑色边框 import Tkinter as tk class Example tk Frame def init self ro
  • 如何在基于servlet的项目中获取部署根目录?

    我正在尝试从 java 获取基于 servlet 的项目的部署根目录 我正在使用以下代码行来获取路径详细信息 Type 1 File directory new File try System out println Current dir
  • 在 iPhone 中保留计数

    我用过 anArray retainCount 获取数组的保留计数 我知道这不应该使用 但我只是为了学习保留概念而使用 以下是我的代码 NSString str NSString alloc initWithFormat a b c d N
  • 两个函数的 JavaScript 回调

    有没有办法用Javascript ES6 实现下面的代码 如果是 我该怎么做 我尝试了这个例子 但没有成功 const funcA callback arg1 gt console log Print arg1 arg1 Print arg
  • GMail 上下文小工具无法正常工作

    我正在尝试在我的域中部署上下文小工具 我已遵循开发指南 但该小工具未显示 我认为问题在于 数据访问 如果安装似乎顺利 则发生事件 在 Google Apps 控制台中 小工具的数据访问部分显示一个红色 X 如果我尝试通过按特定链接授予访问权
  • 我可以更改之前创建的 matplotlib FuncAnimation 的间隔吗?

    我试图弄清楚是否有任何方法可以更改现有 matplotlib FuncAnimation 的间隔 我希望能够根据用户输入调整动画的速度 我发现了类似的问题如何更改帧之间的间隔 python 但既然没有得到答案 我想我还是会问它 我需要和拥有