iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python Matplotlib绘制动图平滑曲线
  • 627
分享到

Python Matplotlib绘制动图平滑曲线

2024-04-02 19:04:59 627人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录绘制动图FuncAnimationArtistAnimation使用 scipy.ndimage.gaussian_filter1d() 高斯核类绘制平滑曲线使用 scipy.i

绘制动图

FuncAnimation,它的使用要求简洁且定制化程度较高。如果想将很多图片合并为一个动图,那么ArtistAnimation是最合适的选择。

FuncAnimation

通过反复调用同一函数来制作动画。

注意:创建FuncAnimation对象后一定要将其赋值给某个变量,否则系统会将其进行垃圾回收。

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

参数:

  • fig:Figure。用于显示动画的figure对象
  • func:callable。用于更新每帧动画的函数。func函数的第一个参数为帧序号。返回被更新后的图形对象列表。
  • frames:iterable, int, generator function, or None, optional。动画长度,帧序号组成的列表
  • init_func:callable, optional。自定义开始帧,即绘制初始化图形的初始化函数
  • fargs:tuple or None, optional。额外的需要传递给func函数的参数。
  • save_count:int, default: 100。保存计数
  • cache_frame_data:bool, default: Trueinterval:int, default: 200。重复调用功能函数的间隔时间,单位是毫秒。
  • repeat_delay:int, default: 0。当repeat为True时,动画延迟多少毫秒再循环。
  • repeat:bool, default: True。是否是循环动画。
  • blit:bool, default: False。选择更新所有点,还是仅更新产生变化的点。

示例:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig = plt.figure()
ax = fig.subplots()

t=np.linspace(0,10,100)
y=np.sin(t)
ax.set_aspect(3)
ax.plot(t,y,'--',c='gray')
line=ax.plot(t,y,c='C2')

def update(i):  #帧更新函数
    global t    #直接引用全局变量,也可以通过函数的frames或fargs参数传递。
    t+=0.1
    y=np.sin(t)
    line[0].set_ydata(y)
    return line

ani=FuncAnimation(fig,update,interval=100) #绘制动画
plt.show() #显示动画

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

fig = plt.figure(figsize=(7, 2), dpi=100)
ax = plt.subplot()
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X)
line1, = ax.plot(X, C, marker="o", markevery=[-1], markeredgecolor="white")
line2, = ax.plot(X, S, marker="o", markevery=[-1], markeredgecolor="white")

def update(frame):
    line1.set_data(X[:frame], C[:frame])
    line2.set_data(X[:frame], S[:frame])

ani = animation.FuncAnimation(fig, update, interval=10)
plt.show()

方法 init(fig, func[, frames, init_func, …])

  • new_frame_seq()
  • new_saved_frame_seq()
  • pause()
  • resume()
  • save(self, filename, writer=None, fps=None, dpi=None, codec=None, bitrate=None, extra_args=None, metadata=None, extra_anim=None, savefig_kwargs=None)
    • filename:保存的文件名
    • writer:FFmpegFileWriter,ImageMagickFileWriter, AVConvFileWriter对象实例,或者表示这些对象的字符串(‘ffmpeg’, ‘imagemagick’,‘avconv’)
    • fps:每秒的帧数
  • to_jshtml([fps, embed_frames, default_mode])返回js动画,用base64文本编码。
    • fps:每秒帧数,默认根据动画的interval确定。
    • embed_frames:布尔类型,是否嵌入帧。
    • default_mode:‘loop’,‘once’或者’reflect’

ArtistAnimation

通过调用一个固定的Artist对象来制作动画,例如给定的系列图片或者matplotlib的绘图对象.。

class matplotlib.animation.ArtistAnimation(fig, artists, *args, **kwargs)

参数:

  • fig:Figure
  • artists:list
  • interval:int, default: 200。每一帧之间的间隔
  • repeat_delay:int,
  • default: 0。每显示一次动画后间隔多长时间重复
  • repeat:bool, default: True。是否重复动画
  • blit:bool, default: False

示例:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
fig = plt.figure()
ax = fig.subplots()

arts=[]
t=np.linspace(0,np.pi*2,20)
for i in range(20):
    t+=np.pi*2/20
    y=np.sin(t)
    lines=ax.plot(y,'--',c='gray')  #绘制一帧图形
    arts.append(lines)              #每帧图形都保存到列表中

ani=ArtistAnimation(fig,arts,interval=200) #绘制动画
#ani.save("animate_artists_basic.gif")  #保存动画
plt.show() #显示动画

方法:

__init__(fig, artists, *args, **kwargs)
new_frame_seq()
new_saved_frame_seq()
pause()
resume()
save(filename[, writer, fps, dpi, codec, ...])

参数:

  • filename:保存的动画文件名称,如’mov.gif’,‘mov.mp4’。
  • writer:保持动画的库。MoviewWriter对象或者字符串。默认值’ffmpeg’。

“pillow”:PillowWriter,用pillow库写如动画文件。
“ffmpeg”:FFMpegWriter,‎基于ffmpeg库写动画。
“ffmpeg_file”:FFMpegFileWriter,基于文件的FFMpegWriter,用ffmpeg库把帧写入临时文件,然后拼接成动画。
“imagemagick”:ImageMagickWriter,‎基于管道的动画GIF。‎帧通过管道传输到ImageMagick并写入文件。
“imagemagick_file”:基于文件的imagemagick写动画。
“hmtl”:HTMLWriter,基于javascript html的动画。

  • fps:每秒帧数,默认根据动画的interval确定
  • dpi:每英寸点数,默认和figure相同。可以控制动画大小尺寸。
  • codec:编码格式,默认’h264’
to_HTML5_video([embed_limit])

embed_limit:动画文件大小限制,单位为MB。默认为20MB,超出限制则不创建动画。 绘制平滑曲线

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 50, 25, 12.5, 6.25, 3.125, 1.5625])

plt.plot(x, y)
plt.title("Spline Curve")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

使用 scipy.ndimage.gaussian_filter1d() 高斯核类绘制平滑曲线

import numpy as np
import matplotlib.pyplot as plt 
from scipy.ndimage import gaussian_filter1d

x=np.array([1,2,3,4,5,6,7])
y=np.array([100,50,25,12.5,6.25,3.125,1.5625])
y_smoothed = gaussian_filter1d(y, sigma=5)

plt.plot(x, y_smoothed)
plt.title("Spline Curve Using the Gaussian Smoothing")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

使用 scipy.interpolate.make_interp_spline() 样条插值类绘制平滑曲线

import numpy as np
from scipy.interpolate import make_interp_spline
import matplotlib.pyplot as plt 
x=np.array([1,2,3,4,5,6,7])
y=np.array([100,50,25,12.5,6.25,3.125,1.5625])
model=make_interp_spline(x, y)
xs=np.linspace(1,7,500)
ys=model(xs)
plt.plot(xs, ys)
plt.title("Smooth Spline Curve")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

它通过使用 scipy.interpolate.make_interp_spline() 首先确定花键曲线的系数,绘制出一条平滑的花键曲线。我们用给定的数据来估计花样曲线的系数,然后用系数来确定间隔紧密的 x 值的 y 值,使曲线平滑。绘制曲线需要沿 X 轴 1 到 7 之间间隔相等的 500。

使用 scipy.interpolate.interp1d 插值类绘制平滑曲线

import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt

x=np.array([1,2,3,4,5,6,7])
y=np.array([100,50,25,12.5,6.25,3.125,1.5625])

cubic_interploation_model=interp1d(x,y,kind="cubic")
xs=np.linspace(1,7,500)
ys=cubic_interploation_model(xs)
plt.plot(xs, ys)
plt.title("Spline Curve Using Cubic Interpolation")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

绘制曲线时,需要在 X 轴上 1 和 7 之间取间隔相等的 500 个点。

拟合曲线后绘制动图

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from scipy.interpolate import interp1d

fig = plt.figure(figsize=(7, 2), dpi=100)
ax = plt.subplot()
x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 50, 25, 12.5, 6.25, 3.125, 1.5625])
cubic_interploation_model = interp1d(x, y, kind="cubic")
xs = np.linspace(1, 7, 500)
ys = cubic_interploation_model(xs)
line3 = ax.plot(xs, ys)
def update(frame):
    line3[0].set_data(xs[:frame], ys[:frame])
ani = animation.FuncAnimation(fig, update, interval=10)
plt.show()

到此这篇关于python Matplotlib绘制动图平滑曲线的文章就介绍到这了,更多相关Python Matplotlib绘制平滑曲线内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python Matplotlib绘制动图平滑曲线

本文链接: https://www.lsjlt.com/news/119945.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python Matplotlib绘制动图平滑曲线
    目录绘制动图FuncAnimationArtistAnimation使用 scipy.ndimage.gaussian_filter1d() 高斯核类绘制平滑曲线使用 scipy.i...
    99+
    2024-04-02
  • python  Matplotlib绘图直线,折线,曲线
    绘制直线图,确定x范围和y的范围 代码: import matplotlib.pyplot as plt import numpy as np xpoints = np.arr...
    99+
    2024-04-02
  • Matplotlib如何绘制动态实时曲线
    这篇文章主要为大家展示了“Matplotlib如何绘制动态实时曲线”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Matplotlib如何绘制动态实时曲线”这篇文章吧。很多时候,我们需要实时的绘制...
    99+
    2023-06-15
  • Python+matplotlib实现简单曲线的绘制
    目录一、安装matplotlib二、测试 matplotlib三、 绘制简单的折线四、使用 scatter() 绘制散点图并设置其样式1、要绘制单个点2、要绘制系列点3、自...
    99+
    2024-04-02
  • android实现可以滑动的平滑曲线图
    本文实例为大家分享了android实现可以滑动的平滑曲线图的具体代码,供大家参考,具体内容如下 直接上代码,里面有详细注解 1 attr 属性编写    <...
    99+
    2024-04-02
  • android怎么实现可以滑动的平滑曲线图
    本文小编为大家详细介绍“android怎么实现可以滑动的平滑曲线图”,内容详细,步骤清晰,细节处理妥当,希望这篇“android怎么实现可以滑动的平滑曲线图”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1 att...
    99+
    2023-07-02
  • Python编程使用matplotlib绘制动态圆锥曲线示例
    目录椭圆双曲线抛物线极坐标方程作为让高中生心脏骤停的四个字,对于高考之后的人来说可谓刻骨铭心,所以定义不再赘述,直接撸图,其标准方程分别为 在Python中,绘制动图需要用到mat...
    99+
    2024-04-02
  • python使用matplotlib绘制折线图
    前言: 我的python学习也告一段落了。不过有些,方法还是打算总结一下和大家分享。我整理了使用matplotlib绘制折线图的一般步骤,按照这个步骤走绘制折线图一般都没啥问题。其实...
    99+
    2024-04-02
  • Python如何绘制Matplotlib折线图
    本篇内容介绍了“Python如何绘制Matplotlib折线图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Matplotlib 绘图在...
    99+
    2023-06-30
  • Python+matplotlib怎么实现简单曲线的绘制
    这篇文章主要讲解了“Python+matplotlib怎么实现简单曲线的绘制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python+matplotlib怎么实现简单曲线的绘制”吧!一、安...
    99+
    2023-06-30
  • 使用matplotlib怎么绘制一个正余弦曲线图
    这篇文章主要介绍了使用matplotlib怎么绘制一个正余弦曲线图,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:1:首先我们需要导入基本的库matplotlib numpymatplot...
    99+
    2023-06-06
  • Python matplotlib实现折线图的绘制
    目录一、版本二、图表主题设置三、一次函数四、多个一次函数五、填充折线图官网: https://matplotlib.org 一、版本 # 01 matplotlib安装情况 imp...
    99+
    2024-04-02
  • python 用matplotlib绘制折线图详情
    目录1. 折线图概述 1.1什么是折线图? 1.2折线图使用场景 1.3绘制折线图步骤 1.4案例展示 2. 折线2D属性 2.1linestyle:折线样式 2.2color:折线...
    99+
    2024-04-02
  • Python绘制loss曲线、准确率曲线
    Python 绘制 loss 曲线、准确率曲线 使用 python 绘制网络训练过程中的的 loss 曲线以及准确率变化曲线,这里的主要思想就时先把想要的损失值以及准确率值保存下来,保存到 .txt ...
    99+
    2023-10-05
    python 机器学习 人工智能
  • Python中ROC曲线绘制
    首先以支持向量机模型为例 先导入需要使用的包,我们将使用roc_curve这个函数绘制ROC曲线! from sklearn.svm import SVC from sklea...
    99+
    2024-04-02
  • Python+Matplotlib实现绘制三维折线图
    目录1.0简介2.0三维图画法与类型1、直线绘制(Line plots)2、散点绘制(Scatter plots)3、线框图(Wireframe plots)4、三角表面图(Tri-...
    99+
    2023-03-21
    Python Matplotlib绘制三维折线图 Python Matplotlib 三维折线图 Python Matplotlib
  • Python曲线平滑的实现示例
    在编写测试程序的时候,由于数据帧数多的原因,导致生成的曲线图比较难看,如下图: 由于高频某些点的波动导致高频曲线非常难看,因此需要对曲线做平滑处理,让曲线过渡更平滑。对曲线进行平滑...
    99+
    2024-04-02
  • Python matplotlib怎么绘制各种流线图
    本篇内容介绍了“Python matplotlib怎么绘制各种流线图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!流线图概述什么是...
    99+
    2023-06-21
  • Python Matplotlib绘制箱线图的全过程
    目录箱线图介绍Matplotlib中绘制箱线图的方法:boxplot程序举例总结箱线图介绍 箱线图(Box-plot)又称为盒式图或箱型图,是一种用来显示一组数据分散情况的统计图,它...
    99+
    2024-04-02
  • PyQt5+QtChart实现绘制曲线图
    目录QSplineSeries实现代码效果图QSplineSeries QSplineSeries类将数据序列显示为曲线图。核心代码: spline = QSplineSeries(...
    99+
    2022-12-15
    PyQt5 QtChart绘制曲线图 PyQt5 QtChart曲线图 PyQt5 QtChart
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作