首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基于matplotlib的毫米波动画

基于matplotlib的毫米波动画
EN

Stack Overflow用户
提问于 2021-01-07 22:51:08
回答 2查看 186关注 0票数 0

我试图建立一个微波旅行和改变频率,因为他们旅行模拟。X轴是时间,波应该沿着x轴移动,然后改变频率(从3 3GHz到30 3GHz)。时间间隔是1纳秒,因为比这更高的时间间隔太快,无法清楚地注意到运动。

我已经创建了一个波浪matplotlib.pyplot的静态模型。现在,我想使用matplotlib.animation来动画它。通过遵循这个文章中的指南,我可以成功地创建一个正弦波动画,但是我不知道从那里到哪里。

如何利用绘制正弦波的matplotlib.animation示例代码并将其调整为动画微波?

微波模型:

用于绘制微波模型的代码:

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
from scipy.signal import chirp
import matplotlib.pyplot as plt
plt.style.use('seaborn-pastel')

T = 0.000000001 #one nanosecond 
n = 1000 # number of samples to generate - the more generated,the more smooth the curve
t = np.linspace(0, T, n, endpoint=False) # x-axis 
f0_micro = 3000000000 #frequency min value: 3GHz
f1_micro = 30000000000 #frequency max value: 30GHz
y_micro = chirp(t, f0_micro, T, f1_micro, method='logarithmic')

plt.plot(t,y_micro)
plt.grid(alpha=0.25)
plt.xlabel('t (secs)')
plt.title('Microwaves in one nanosecond')
plt.show()

动画正弦波视频:

Aa4huCJefHt7nlX3nKQKGA.gif

用于绘制动画正弦波的代码:

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.animation import FuncAnimation
plt.style.use('seaborn-pastel')


fig = plt.figure()
ax = plt.axes(xlim=(0, 4), ylim=(-2, 2))
line, = ax.plot([], [], lw=3)

def init():
    line.set_data([], [])
    return line,
def animate(i):
    x = np.linspace(0, 4, 1000)
    y = np.sin(2 * np.pi * (x - 0.01 * i))
    line.set_data(x, y)
    return line,

anim = FuncAnimation(fig, animate, init_func=init,
                               frames=200, interval=20, blit=True)


anim.save('sine_wave.gif', writer='imagemagick')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-08 00:03:51

对于这种类型的动画

而不是画出所有的点

代码语言:javascript
运行
AI代码解释
复制
plt.plot(t, y_micro) # <--- skip it

你必须创建一个空的地块--有正确的限制

代码语言:javascript
运行
AI代码解释
复制
fig = plt.figure()

ax = plt.axes(xlim=(t[0], t[-1]), ylim=(min(y_micro), max(y_micro)))

line, = ax.plot([], [], lw=3)

animation的后面,您可以使用i只放置部分点。

代码语言:javascript
运行
AI代码解释
复制
line.set_data(t[:i], y_micro[:i])
代码语言:javascript
运行
AI代码解释
复制
import numpy as np
from scipy.signal import chirp
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
plt.style.use('seaborn-pastel')

# --- generate all data without drawing ---

T = 0.000000001 #one nanosecond 
n = 1000 # number of samples to generate - the more generated,the more smooth the curve

t = np.linspace(0, T, n, endpoint=False) # x-axis 

f0_micro = 3000000000 #frequency min value: 3GHz
f1_micro = 30000000000 #frequency max value: 30GHz
y_micro = chirp(t, f0_micro, T, f1_micro, method='logarithmic')

# --- create empty plot ---

#plt.plot(t,y_micro) # <--- skip it

fig = plt.figure()
ax = plt.axes(xlim=(t[0], t[-1]), ylim=(min(y_micro), max(y_micro)))
line, = ax.plot([], [], lw=3)

# --- other elements on plot ---

plt.grid(alpha=0.25)
plt.xlabel('t (secs)')
plt.title('Microwaves in one nanosecond')

# --- animate it ----

def init():
    # put empty data at start
    line.set_data([], [])
    return line,
    
def animate(i):
    # put new data in every frame using `i`
    line.set_data(t[:i], y_micro[:i])
    return line,

# calculate how many frames has animation
frames_number = len(t)

anim = FuncAnimation(fig, animate, init_func=init, frames=frames_number, interval=10, blit=True)

plt.show()

# I use `fps` (frames per second) to make it faster in file
anim.save('microwave.gif', fps=120) #, writer='imagemagick')

编辑

如果您需要带边距的绘图,那么您必须向限制中添加一些值,因为现在绘图不会自动添加边距。

代码语言:javascript
运行
AI代码解释
复制
x_margin = T/30  # I tested manually different values
y_margin = 0.1   # I tested manually different values

x_limits = (t[0] - x_margin, t[-1] + x_margin)
y_limits = (min(y_micro) - y_margin, max(y_micro) + y_margin)

fig = plt.figure()
ax = plt.axes(xlim=x_limits, ylim=y_limits)
line, = ax.plot([], [], lw=3)

如果您想要更快的动画在文件中,那么您可以尝试使用save( ..., fps= ...)对数量的frames per second

或者你可以画更少的画框

代码语言:javascript
运行
AI代码解释
复制
frames_number = len(t) // 2

并在每一帧中显示更多的点

代码语言:javascript
运行
AI代码解释
复制
i = i*2
line.set_data(t[:i], y_micro[:i])
票数 2
EN

Stack Overflow用户

发布于 2021-01-08 00:45:07

一种新的和稍微容易使用的替代matplotlib.animate的方法是赛洛普。

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import chirp
from celluloid import Camera

fig = plt.figure()
camera = Camera(fig)

T = 0.000000001 #one nanosecond
n = 1000 # number of samples to generate - the more generated,the more smooth the curve
t = np.linspace(0, T, n, endpoint=False) # x-axis
f0_micro = 3000000000 #frequency min value: 3GHz
f1_micro = 30000000000 #frequency max value: 30GHz
y_micro = chirp(t, f0_micro, T, f1_micro, method='logarithmic')

for i in range(len(t)):

    plt.plot(t[:i], y_micro[:i], "r")
    camera.snap()

    plt.grid(alpha=0.25)
    plt.xlabel('t (secs)')
    plt.title('Microwaves in one nanosecond')

animation = camera.animate(interval=10)
plt.show()

它可以做您想做的事情,只需对静态图的代码进行很少的修改。您不需要定义额外的功能等等。

最终结果如下

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65624585

复制
相关文章
小程序-渐入渐出动画效果实现
在做小程序列表展示的时候,接到了一个需求。需要在列表展示的时候加上动画效果。在此献上小程序动画效果的教程。
腾讯NEXT学位
2019/08/12
3.2K0
小程序-渐入渐出动画效果实现
Linux基础(进/线程间的竞争)
今天,继续来讨论哲学话题。什么是真正的公平?给你两个选择,第一:全部人排一样的队,吃一样放的饭,赚一样的钱。第二:人人都分三六九等,有人高高在上事事优先,有人人微言轻事事垫底。你觉得如何?
用户2617681
2019/08/07
7660
Linux基础(进/线程间的竞争)
《Flutter 动画系列》组合动画
老孟导读:在项目中动画效果很多时候是几种动画的组合,比如颜色、大小、位移等属性同时变化或者顺序变化,这篇文章讲解如何实现组合动画。
老孟Flutter
2020/09/11
1.3K0
Android动画系列(2)—补间动画
补充: 除了在XML中指定android:layoutAnimation,还可以通过LayoutAnimationController来实现。
八归少年
2022/06/29
7370
Taro React组件使用(1) —— Overlay 遮罩层【渐入渐出动画遮罩层】
Overlay 遮罩层 ---- 提供一个简单的 Overlay 遮罩层,在页面上的层级为 1026; 1. 使用指南 在 Taro 文件中引入组件,将组件放入src下的components文件夹中 import RuiOverlay from "../../components/RuiOverlay/RuiOverlay"; 2. 基础用法 2.1 组件使用 {/* 基本案例 */} <RuiOverlay isOpened={isShowBase} onClose={() => { this.
Rattenking
2022/11/02
1.9K0
基于ThreeJs Heart animation 动画
https://bilibiliou.github.io/assets/download/animations/heart-animation.gif
腾讯IVWEB团队
2020/06/28
1.1K0
Canvas系列(10):动画初级
所谓动画其实就是快读绘制图片,由于人的眼睛更不上屏幕绘制的速率,所以看到的就好像连着的一样,也就形成了动画,动画片就是这个原理,canvas中的动画也是这个原理。提到动画就不得不说一个函数了,那就是requestAnimationFrame。这是一个定时执行的函数,类似于setTimeout,只是间隔时间不再有我们自己手动去设定,而是由计算机自己去计算,这样比我们直接设定的误差更小(通常我们是定1000/60,约等于16.7毫秒,因为CPU的频率一般是60Hz,也就是1秒最多可以刷新60次界面)。但是往往浏览器对requestAnimationFrame的支持不够友好,那这就需要polyfill,通常一种简单的polyfill可以这么写:
kai666666
2020/10/19
8210
Canvas系列(10):动画初级
Canvas系列(12):动画高级
通过前面章节的学习,我们已经学会了直线和部分曲线运动,同时我们也学会了加速、减速、摩擦力等操作。那么动画还有什么需要深入研究下去的呢?当然有,那就是让动画更加平滑,更细滑。
kai666666
2020/10/17
1.1K0
【图表组件套件】上海道宁为开发人员提供Steema下载、试用、教程
Steema Software SL公司成立于1995年,Steema对客户服务的专注始终处于前沿,为客户提供业内更全面、更具成本价值的支持环境。
51Component
2022/07/13
3K0
【图表组件套件】上海道宁为开发人员提供Steema下载、试用、教程
操作系统笔记-进/线程模型
进程表(process table),也称进程控制块(PCB),是由操作系统维护的,每个进程占用其中一个表项。该表项包含了操作系统对进程进行描述和控制的全部信息,从而保证该进程换出后再次启动时,就像从未中断过一样。
Cloud-Cloudys
2020/07/25
5480
React中的JSX原理渐析
在react官方中讲到,关于jsx语法最终会被babel编译成为React.createElement()方法。
19组清风
2021/11/15
2.4K0
React中的JSX原理渐析
Canvas系列(11):动画中级
上一章我们讲了简单的动画是如何绘制的,如果没有看上一章的童鞋,请点这里,本章的内容也是接着上一章的内容,代码也只修改其中部分。
kai666666
2020/10/19
7070
Canvas系列(11):动画中级
《Flutter 动画系列一》25种动画组件超全总结
任何程序的动画原理都是一样的,即:视觉暂留,视觉暂留又叫视觉暂停,人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。
老孟Flutter
2020/09/11
1.5K0
android 软软的动画弹出菜单,基于Facebook的Rebuond
︿( ̄︶ ̄)︿我是路过的DEMO : https://github.com/CarGuo/AnimationMenu
GSYTech
2018/08/22
9340
android 软软的动画弹出菜单,基于Facebook的Rebuond
基于HTML5的爱心表白动画特效
从视觉上看,它也是一个爱心轮廓,但是不同的是这个爱心轮廓由许多跳动的小爱心组成,更加有一种3D立体的效果。
芯动大师
2022/11/20
2.8K0
《Flutter 动画系列一》25种动画组件超全总结
任何程序的动画原理都是一样的,即:视觉暂留,视觉暂留又叫视觉暂停,人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。
老孟Flutter
2020/04/02
1.2K0
图片时载入的渐显特效JQuery
作者:matrix 被围观: 4,685 次 发布时间:2011-10-01 分类:Wordpress 兼容并蓄 | 2 条评论 »
HHTjim 部落格
2022/09/26
16.7K0
图片时载入的渐显特效JQuery
基于 HTML5 Canvas 实现的文字动画特效
前言 文字是网页中最基本的元素,一般我们在网页上都是展示的静态文字,但是就效果来说,还是比较枯燥的。文字淡入淡出的动画效果在项目中非常实用,如果有某些关键的文字,可以通过这种动态的效果来提醒用户阅读。
HT_hightopo
2018/07/06
4K0
股指期货保证金调整,贴水渐行渐远,尔等蓄势待发!
经中国证监会同意,中国金融期货交易所在综合评估市场风险、积极完善监管制度的基础上,稳妥有序调整股指期货交易安排:
量化投资与机器学习微信公众号
2019/02/26
4450
Vue.js 系列教程 5:动画
原文:intro-to-vue-5-animations 译者:nzbin 译者的话:经过两周的努力,终于完成了这个系列的翻译,由于时间因素及个人水平有限,并没有详细的校对,其中仍然有很多不易理解的地方。我和原作者的初衷一样,希望大家能够通过这个系列文章有所收获,至少可以增加学习的乐趣,我也在学习的路上,所学心得必将与大家共勉。 这是 JavaScript 框架 Vue.js 五篇教程的第五部分。在这个系列的最后一部分,我们将学习动画(如果你了解我,你知道这一章迟早会来)。这个系列教程并不是一个完整的用户手
叙帝利
2018/01/17
2.9K0
Vue.js 系列教程 5:动画

相似问题

使用随机值填充c#对象

36

如何使用JSON的值填充现有的对象实例

18

如何使用随机值填充Postgre列

10

如何使用随机对象元素填充<ul>?

10

使用循环使用随机值填充树

10
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档