animation.FuncAnimation中第一次执行update会执行两次?

背景

        最近在开发过程中,我想要动态生成图表,故接触到了animation.FuncAnimation这个函数。此函数会间隔一段时间动态更新图表。一般来说,执行更新的函数被命名为update。

        奇怪的是,我每次运行这个函数,update总会被预料的多执行一次?这是为什么呢?研究之后遂有此文

结论

update会在一开始的时候被额外调用一次,以生成初始化图案

现象推理

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimationfig, ax = plt.subplots()def update(frame):# 更新画面ax.plot(x, y)print("frame:",frame)ani = FuncAnimation(fig, update, frames=range(10), interval=100)
plt.show()

此时输出为:

frame:0
frame:0
frame:1
frame:2
frame:3
frame:4
frame:5
frame:6
frame:7
frame:8
frame:9

可以看到,frame0居然被执行了两次。非常神奇和奇怪。

源码分析

def _init_draw(self):super()._init_draw()# Initialize the drawing either using the given init_func or by# calling the draw function with the first item of the frame sequence.# For blitting, the init_func should return a sequence of modified# artists.if self._init_func is None:try:frame_data = next(self.new_frame_seq())except StopIteration:# we can't start the iteration, it may have already been# exhausted by a previous save or just be 0 length.# warn and bail.warnings.warn("Can not start iterating the frames for the initial draw. ""This can be caused by passing in a 0 length sequence ""for *frames*.\n\n""If you passed *frames* as a generator ""it may be exhausted due to a previous display or save.")returnself._draw_frame(frame_data)else:self._drawn_artists = self._init_func()if self._blit:if self._drawn_artists is None:raise RuntimeError('The init_func must return a ''sequence of Artist objects.')for a in self._drawn_artists:a.set_animated(self._blit)self._save_seq = []def _draw_frame(self, framedata):if self._cache_frame_data:# Save the data for potential saving of movies.self._save_seq.append(framedata)self._save_seq = self._save_seq[-self._save_count:]# Call the func with framedata and args. If blitting is desired,# func needs to return a sequence of any artists that were modified.self._drawn_artists = self._func(framedata, *self._args)if self._blit:err = RuntimeError('The animation function must return a sequence ''of Artist objects.')try:# check if a sequenceiter(self._drawn_artists)except TypeError:raise err from None# check each item if it's artistfor i in self._drawn_artists:if not isinstance(i, mpl.artist.Artist):raise errself._drawn_artists = sorted(self._drawn_artists,key=lambda x: x.get_zorder())for a in self._drawn_artists:a.set_animated(self._blit)save_count = _api.deprecate_privatize_attribute("3.7")

其中 self._func() 是我们的update函数,在这里的 _init_draw 函数中,若没有初始化则,执行一次_draw_frame 操作。再此操作中会声明如下:

self._drawn_artists = self._func(framedata, *self._args)

显然在此初始化过程中,我们执行了一次update。 

结论

update会在一开始的时候被额外调用一次,以生成初始化图案

我们可以使用如下代码来规避这个过程:

flag = False
# 定义一个更新函数用于动画
def update(i):global flagax.clear()  ax.set_xlabel('Recall')ax.set_ylabel('Precision')title = f'Precision-Recall Curve for Class {i} (area = {average_precision[i]:0.2f})'if flag == False:line, = ax.plot(recall[i], precision[i], color=plt.cm.viridis(i / len(np.unique(y_test))))flag = Trueax.set_title(title)return line,else:line, = ax.plot(recall[i], precision[i], label=f'Class {i}', color=plt.cm.viridis(i / len(np.unique(y_test))))ax.legend()print("i = ", i)ax.set_title(title)return line,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19738.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

GBDT 算法

GBDT 梯度决策提升树是将一些弱分类决策树的结果加在一起,每一棵决策树对前一颗觉得树残差进行优化,从而使得总体的损失值达到最小。 GBDT 公式 Fm-1: 上一棵树的结果 α \alpha α: 学习率 hm(x): 当前树,通过训练调整结果,降低…

java~Lambda表达式

目录 Lambda和匿名内部类 语法 函数式接口 无返回值(无参、有参) 有返回值(无参、有参) 语法精简 四个基本的函数式接口 方法引用 实例方法引用 静态方法引用 特殊方法引用 构造方法引用 数组引用 集合 List、Set …

PyQt5信号与槽二

窗口数据传递 在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的;如果这个程序有多个窗口,那么还应该关心不同的窗口之间是如何传递数据的。对于多窗口的情况,一般有两种…

【java】多态

一、概念 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作。 同一个事件发生在不同的对象上会产生不同的结果。 比如: public class Test {public static void main(String[] args) {Person xn…

使用Holoviews创建复杂的可视化布局

目录 一、Holoviews简介 二、安装Holoviews 三、Holoviews的基本概念 元素(Elements): 容器(Containers): 映射(Mappings): 四、基本用法 创建元素: …

Java2.1——异常

异常基本概念 一:程序出错 分类 : 编辑错误,逻辑错误,运行时错误 目的: 异常处理让程序出错了还运行,避免中止运行 二: 运行时错误 当出现编译时无法预料的问题,将运行错误报告…

2025年假期python,工作日python脚本求出 输出日期内容

# coding:utf-8 import datetime# 假设已知的节假日和调休安排 holidays [datetime.date(2025, 1, 1), # 元旦datetime.date(2025, 1, 28), # 春节datetime.date(2025, 1, 29), # 春节datetime.date(2025, 1, 30), # 春节datetime.date(2025, 1, 31), # 春节datetime.dat…

1TB! 台湾最新倾斜摄影3DTiles数据分享

之前的文章分享了546GB香港倾斜摄影3DTiles数据,主要是验证倾斜模型3DTiles转换工具的生产效率和数据显示效率,结果对比可以看出无论是数据生产速度以及成果数据显示效率上,都优于其他两种技术路线。最近使用倾斜模型3DTiles工具生产了台湾地…

ssm136公司项目管理系统设计与实现+jsp(论文+源码)_kaic

毕 业 设 计(论 文) 题目:公司项目管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本T公司项目管理系…

【Sql Server】sql server 2019设置远程访问,外网服务器需要设置好安全组入方向规则

大家好,我是全栈小5,欢迎来到《小5讲堂》。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言1、无法链接…

小车综合玩法--2.超声波避障

一、实验准备 通过超声波模块与小车结合,实现小车超声波避障。小车接线已安装,且安装正确 二、实验原理 通过超声波我们获取小车与障碍物的距离。当检测到小车与障碍物的距离小于我们的设置的距离时,小车左旋避开障碍物。 三、实验源码 #!…

「二」体验HarmonyOS端云一体化开发模板——创建端云一体化工程

关于作者 白晓明 宁夏图尔科技有限公司董事长兼CEO、坚果派联合创始人 华为HDE、润和软件HiHope社区专家、鸿蒙KOL、仓颉KOL 华为开发者学堂/51CTO学堂/CSDN学堂认证讲师 开放原子开源基金会2023开源贡献之星 「目录」 「一」HarmonyOS端云一体化概要 「二」体验HarmonyOS端云一…

操作系统启动实验

简单的操作系统 汇编代码 ; hello-os ; TAB4ORG 0x7c00 ; 指明程序装载地址; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy codeJMP entryDB 0x90DB "HELLOIPL" ; 启动扇区名称(8字节)DW 512 ; 每个扇区(s…

助力模型训练,深度学习的经典数据集介绍

想要训练出效果好的模型,高质量的数据集必不可少。深度学习的经典数据集包括MNIST手写数字数据集、Fashion MNIST数据集、CIFAR-10和CIFAR-100数据集、ILSVRC竞赛的ImageNet数据集、用于检测和分割的PASCAL VOC和COCO数据集等,本文将对这些数据集进行介绍…

Spring基础——针对实习面试

目录 Spring基础什么是Spring框架?列举一些重要的Spring模块Spring Core 核心模块Spring AOP 模块Spring MVC 模块Spring Data 模块Spring Security 模块Spring Boot 模块 Spring,Spring MVC,Spring Boot之间什么关系(区别&#x…

PH热榜 | 2024-11-17

DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 在线预览 1. Octokit 标语:人人都能用的无代码游戏和AR滤镜制作工具 介绍:Octokit 是一款无需编程技能就能使用…

分享本周所学——三维重建算法3D Gaussian Splatting(3DGS)

大家好,欢迎来到《分享本周所学》第十二期。本人是一名人工智能初学者,刚刚读完大二。前几天自学了一下3D Gaussian Splatting(3DGS),觉得非常有意思。写这篇文章主要是因为网上大部分关于3DGS的文章都比较晦涩&#x…

Python-简单病毒程序合集(一)

前言:简单又有趣的Python恶搞代码,往往能给我们枯燥无味的生活带来一点乐趣,激发我们对编程的最原始的热爱。那么话不多说,我们直接开始今天的编程之路。 编程思路:本次我们将会用到os,paltform,threading,ctypes,sys,…

技术成长战略是什么?

文章目录 技术成长战略是什么?1. 前言2. 跟技术大牛学成长战略2.1 系统性能专家案例2.2 从开源到企业案例2.3 技术媒体大V案例2.4 案例小结 3. 学习金字塔和刻意训练4. 战略思维的诞生5. 建议 技术成长战略是什么? 1. 前言 在波波的微信技术交流群里头…

哪家云电脑便宜又好用?ToDesk云电脑、顺网云、达龙云全方位评测

陈老老老板🤴 🧙‍♂️本文专栏:生活(主要讲一下自己生活相关的内容)生活就像海洋,只有意志坚强的人,才能到达彼岸。 🧙‍♂️本文简述:讲一下市面上云电脑的对比。 🧙‍♂️上一篇文…