Python动态绘图详解

news2024/11/16 6:28:31

文章目录

    • 示例
    • FuncAnimation
    • 三维情况

示例

matplotlib中的animation提供了动态绘图功能,下面列举一个最简单的动态绘制三角函数的例子,来初步演示一下。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots(figsize=(5,3))
line, = ax.plot([], [], lw=1)
ax.grid()

def init():
    ax.set_ylim(-1, 1)
    ax.set_xlim(0, 10)
    line.set_data([],[])
    plt.tight_layout()
    return line,

def animate(N):
    x = np.arange(N)/10
    y = np.sin(x)
    line.set_data(x, y)
    return line,

ani = animation.FuncAnimation(fig, animate, range(100), init_func=init, interval=40)
ani.save("ani_test_0.gif")
plt.show()

效果如下

在这里插入图片描述

其中,fig, ax为绘图窗口和坐标轴,这是在任何绘图操作中都涉及到的元素,但在本例中的动态绘图操作中,ax是以一种"全局变量"的形式存在的,将在后米娜的initanimate函数中被直接调用。

line即为绘制在ax之上的曲线,由于ax.plot默认返回一个曲线列表,通过line,=这样的方法,可以提取出曲线列表中的第0条曲线,其结果等价于

line = ax.plot([], [], lw=1)[0]

接下来init函数用于绘图曲线的初始化,animate用于调整绘图函数的动态变化,其输入N暂时可以简单地理解为第N张图像的曲线。

接下来,就是动态绘图的核心对象FuncAnimation

FuncAnimation

FuncAnimation是一个类,其构造函数为

FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, *, cache_frame_data=True, **kwargs)

前面的4个参数在示例程序中已经用到,fig为绘图窗口;func为图像更新函数;frames为绘图帧号;init_func为图像的初始化函数。

其绘图逻辑写成伪代码类似于

for n in frames:
    if n>0:
        draw(func(n))
    else:
        draw(init(n))    

如果frames是一个整数,则在调用时会自动转为range(frames)

而用于绘图的主要对象,就是坐标轴ax,故而在示例中的animate以及init函数的返回对象是line,,当然也可以写成return [line]

FuncAnimation中的其他参数含义如下:

  • fargs 为绘图函数func的其他输入参数
  • save_count 缓存帧数
  • interval 帧延时,默认200毫秒,帧率25fps对应40毫秒。
  • repeat_delay 重复延时,单位是微秒
  • repeatFalse时,动画将只演示一遍。

三维情况

三维情况的动图绘制函数,机理与二维是相同的,下面引用官方画廊中的示例,来演示一下三维动图的绘制流程,首先生成一组随机行走的曲线

np.random.seed(19680801)        # 随机数种子,便于复现

def random_walk(N, L=0.05):
    st = np.random.random(3)
    steps = np.random.uniform(-L, L, size=(N, 3))
    walk = st + np.cumsum(steps, axis=0)
    return walk

walks = [random_walk(30) for index in range(40)]

random_walk可生成一条随机行走的三维曲线,walks通过调用这个函数,共生成了40条曲线,下面就是对这40条曲线的调用

def animate(num, walks, lines):
    for line, walk in zip(lines, walks):
        line.set_data(walk[:num, :2].T)
        line.set_3d_properties(walk[:num, 2])
    return lines

fig = plt.figure(figsize=(5,4))
ax = fig.add_subplot(projection="3d")

lines = [ax.plot([], [], [], lw=1)[0] for _ in walks]

ax.set(xlim3d=(0, 1), xlabel='X')
ax.set(ylim3d=(0, 1), ylabel='Y')
ax.set(zlim3d=(0, 1), zlabel='Z')

ani = animation.FuncAnimation(
    fig, animate, 30, fargs=(walks, lines), interval=100)

plt.show()

效果如下

在这里插入图片描述

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

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

相关文章

深入理解Java虚拟机——垃圾收集器

1.前言 在前面我们已经说过了垃圾收集算法,那么现在我们要讲的垃圾收集器,实际上就是对垃圾收集算法的实践。 首先我们先看一张图,这张图可以帮助我们了解各款经典垃圾收集器之间的关系: 图中的垃圾收集器所在的区域代表了它是属…

学系统集成项目管理工程师(中项)系列18b_进度管理(下)

1. 制定进度计划 1.1. 分析活动顺序、持续时间、资源需求和进度制约因素,创建项目进度模型的过程 1.2. 输入 1.2.1. 进度管理计划 1.2.2. 活动清单 1.2.3. 活动属性 1.2.4. 项目进度网络图 1.2.5. 活动资源需求 1.2.6. 资源日历 1.2.7. 活动持续时间估算 …

Linux网络编程——套接字网络编程预备知识

0.关注博主有更多知识 操作系统入门知识合集 目录 1.理解IP地址和MAC地址 2.认识端口号 3.感性认识TCP协议和UDP协议 4.网络字节序 5.socket编程接口 1.理解IP地址和MAC地址 事实上在上一篇博客当中粗浅了介绍一个IP地址MAC地址,其中我们知道IP地址提供方向…

坐标系变换推导(欧拉角、方向余弦矩阵、四元数)+代码解析

一、为什么选择四元数 描述两个坐标系之间的变换关系主要有几个方法 1、欧拉角法(存在奇异性和万向锁而且三个轴旋转的顺序不好定) 2、方向余弦矩阵法(翻译为Directional cosine matrix,简称DCM,也称为旋转矩阵,看了很多博客写的是C11-C33的那…

【Python实操】如何快速写一个乒乓球游戏?

文章目录 前言一、 导入 turtle 和 Screen二、创建一个球3.创建一个 AI 挡板4.创建自己的挡板5.创建移动AI挡板的函数6.创建一个函数以移动你的挡板并用键盘控制它7.全部代码总结 前言 本文提供了一个 Python 实现的乒乓球游戏代码,你只需要将代码复制并粘贴到编辑…

如何防御流量攻击

随着互联网的发展,网络安全问题也日益突出。其中,流量攻击成为网络攻击的一种常见手段。那么流量攻击属于什么攻击,服务器防御流量攻击的方法有哪些呢?本文小编将为您一一解答。 一、流量攻击是什么? 流量攻击即DDoS攻击,全称为…

如何进行DNS优化

在互联网时代,网站的访问速度直接影响着用户体验和转化率。而DNS(Domain Name System)作为域名解析系统,负责将域名转换为IP地址,是网站访问速度的重要因素之一。因此,DNS优化成为了提升网站速度的重要手段之一。 DNS优化到底是什…

SpringMVC-RESTful

REST风格 1. REST简介1.1 REST介绍1.2 RESTful介绍1.3 注意事项 2. RESTful入门案例2.1 快速入门2.2 PathVariable介绍2.3 RequestBody、RequestParam、PathVariable区别和应用 3. REST快速开发【重点】3.1 代码中的问题3.2 Rest快速开发 4. 案例:基于RESTful页面数…

拿捏c语言循环

📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。 c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。 本章用循环去写一些题目。 让我们开启c语言…

Kubernetes系列---Kubernetes 理论知识 | 初识

Kubernetes系列---Kubernetes 理论知识 | 初识 1.K8s 是什么?2.K8s 特性3.小拓展(业务升级)4.K8s 集群架构与组件①架构拓扑图:②Master 组件③Node 组件 五 K8s 核心概念六 官方提供的三种部署方式 1.K8s 是什么? K…

springboot打包成jar包运行到服务器 java v 1.8

1.项目打包成jar包 1.1 1.2 2 jdk安装 2.1 jdk 官网 -> oracle 官方的jdk https://www.oracle.com/java/technologies/downloads/#java8 2.2 本地上传文件到服务器 2.3 配置安装 tar -zvxf jdk-8u131-linux-x64.tar.gz -->解压修改配置文件 source /etc/profile /…

Java 10 字符串

1.API 1.1API 概述 什么是API ​ API (Application Programming Interface) :应用程序编程接口 java 中的 API ​ 指的就是 JDK 中提供的各种功能的 Java 类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只…

C++好难(3):类和对象(中篇)

【本章目标】 类的6个默认成员函数构造函数析构函数拷贝构造函数赋值运算符重载const成员函数取地址及const取地址操作符重载 目录 【本章目标】 1.类的6个默认成员函数 2.构造函数 2.1概念 2.2构造函数的特性 特性一 特性二 特性三 特性四 特性五 特性六 特性七 …

Monkey Patching in Go

gomonkey 用来给函数打桩,这种使用一个新的方法实现来替换原来的实现逻辑,怎么看都觉得很神奇。举个例子,在单测中方法 json.Marshal 可以被 gomonkey 覆写成另一种逻辑实现,我准备从原理和使用的角度来看看 gomonkey。主要是来看…

LeetCode 第 344 场周赛

相当的惨烈&#xff0c;乱交 Q1 前后缀分解,用set统计不同元素的个数 class Solution {public:vector<int> distinctDifferenceArray(vector<int>& nums) {int n nums.size();vector<int> L(n 1, 0), R(n 1, 0); // 前缀不同数的个数set<int&g…

MLC LLM - 大模型本地部署解决方案

MLC LLM 是一种通用解决方案&#xff0c;它允许将任何语言模型本地部署在各种硬件后端和本地应用程序上&#xff0c;此外还提供了一个高效的框架&#xff0c;供每个人根据自己的用例进一步优化模型性能。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 我们的使命是让…

【Python】使用Print函数制作旋转的动画

1. 引言 如果你想有效地学习Python&#xff0c;这篇文章可能不适合你。接下来的一切都可能是愚蠢、和浪费时间&#xff0c;但哪有怎么样&#xff0c;毕竟这玩意很有趣呀&#xff01; 2. 好玩的脚本 首先&#xff0c;我们来看两个好玩的Python脚本&#xff0c;如下&#xff1…

开关电源基础03:正激和反激开关电源拓扑(3)-反激拓扑

说在开头&#xff1a;关于不确定性原理 1927年2月&#xff0c;那个冬天对海森堡来说简直是一场噩梦&#xff0c;越来越多的人转向了薛定谔和他那该死的波动理论&#xff0c;把他的矩阵忘得一干二净&#xff1b;而最让他伤心和委屈的是&#xff0c;玻尔也转向了他的对立面&…

大规模并行处理架构Doris编译部署篇

目录 1 Doris编译1.1 使用 Docker 开发镜像编译&#xff08;推荐&#xff09;1.1.1 遇到的问题1.1.1 遇到的问题 1.2 直接编译&#xff08;CentOS/Ubuntu&#xff09;1.2.1 环境准备1.2.2 系统依赖&#xff08;一次性安装&#xff09;1.2.3 手动安装系统依赖1.2.3.1 CMake 3.11…

Linux驱动开发:SPI子系统

1、SPI简介 1.1 四根线 MISO&#xff1a;主设备数据输入&#xff0c;从设备数据输出。 MOSI&#xff1a;主设备数据输出&#xff0c;从设备数据输入。 SCLK&#xff1a;时钟信号&#xff0c;由主设备产生。 CS&#xff1a; 从设备片选信号&#xff0c;由主设备控制。 1.2…