使用matplotlib创建Gif动图的实现

 更新时间:2022年04月19日 09:05:35   作者:bashendixie5  
本文主要介绍了使用matplotlib创建Gif动图的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、Matplotlib 简介

数据可视化有助于更有效地讲述有关数据的故事并使其易于呈现。有时很难用静态图表来解释数据的变化,为此,我们将讨论matplotlib提供的名为“Animation”的动画库之一。以下是要涵盖的主题。

最流行的Python二维绘图库是Matplolib。大多数人从Matplotlib开始他们的探索性数据分析之旅。它可以轻松创建绘图、直方图、条形图、散点图等。与Pandas和Seaborn一样,它可以创建更复杂的视觉效果。

但是也有一些缺陷:

Matplotlib的命令式 API,通常过于冗长。

有时糟糕的风格默认值。

对网络和交互式图表的支持不佳。

对于大型和复杂的数据通常很慢。

2、绘制动画正弦和余弦波

参考代码如下

import matplotlib.animation as anime
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
 
fig = plt.figure()
l, = plt.plot([], [], 'k-')
l2, = plt.plot([], [], 'm--')
p1, = plt.plot([], [], 'ko')
p2, = plt.plot([], [], 'mo')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.title('title')
 
plt.xlim(-5, 5)
plt.ylim(-5, 5)
 
 
def func(x):
    return np.sin(x) * 3
 
 
def func2(x):
    return np.cos(x) * 3
 
 
metadata = dict(title="Movie", artist="sourabh")
writer = anime.PillowWriter(fps=15, metadata=metadata)
 
xlist = []
ylist = []
ylist2 = []
xlist2 = []
with writer.saving(fig, "sin+cosinewave.gif", 100):
    for xval in np.linspace(-5, 5, 100):
        xlist.append(xval)
        ylist.append(func(xval))
 
        l.set_data(xlist, ylist)
        l2.set_data(xlist2, ylist2)
 
        p1.set_data(xval, func(xval))
 
        writer.grab_frame()
    for xval in np.linspace(-5, 5, 100):
        xlist2.append(xval)
        ylist2.append(func2(xval))
 
        l.set_data(xlist, ylist)
        l2.set_data(xlist2, ylist2)
 
        p2.set_data(xval, func2(xval))
 
        writer.grab_frame()

动画效果图如下。

3、绘制曲面图

参考代码如下,这段代码会运行一段时间。

import matplotlib
from matplotlib import cm
import matplotlib.animation as anime
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
 
np.random.seed(29680801)
 
fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))
 
plt.xlim(-5, 5)
plt.ylim(-5, 5)
 
metadata = dict(title="Movie", artist="sourabh")
writer = anime.PillowWriter(fps=15, metadata=metadata)
 
def func(x, y, r, t):
    return np.cos(r / 2 + t) * np.exp(-np.square(r) / 50)
 
xdata = np.linspace(-10, 10, 1000)
ydata = np.linspace(-10, 10, 1000)
 
x_list, y_list = np.meshgrid(xdata, ydata)
r_list = np.sqrt(np.square(x_list) + np.square(y_list))
 
with writer.saving(fig, "exp3d.gif", 100):
    for t in np.linspace(0, 20, 160):
        z = func(x_list, y_list, r_list, t)
        ax.set_zlim(-1, 1)
        ax.plot_surface(x_list, y_list, z, cmap=cm.viridis)
        writer.grab_frame()
        plt.cla()
 

动画效果如下 

 4、绘制回归图

参考代码如下

import matplotlib
from matplotlib import cm
import matplotlib.animation as anime
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
 
np.random.seed(23680545)
 
metadata = dict(title="Movie", artist="sourabh")
writer = anime.PillowWriter(fps=15, metadata=metadata)
 
fig = plt.figure()
plt.xlim(-8, 8)
plt.ylim(-8, 8)
 
 
def func(x):
    return x * 1.2 + 0.1 + np.random.normal(0, 2, x.shape)
 
 
x = np.random.uniform(-7, 7, 10)
x = np.sort(x)
y = func(x)
 
coeff = np.polyfit(x, y, 1)
print(coeff)
xline = np.linspace(-6, 6, 40)
yline = np.polyval(coeff, xline)
 
lPnt, = plt.plot(x, y, 'o')
l, = plt.plot(xline, yline, 'k-', linewidth=3)
 
plt.show()
 
fig = plt.figure()
plt.xlim(-10, 10)
plt.ylim(-10, 10)
 
lPnt, = plt.plot([], [], 'o')
l, = plt.plot([], [], 'k-', linewidth=3)
 
x_List = []
y_List = []
 
x_pnt = []
y_pnt = []
 
with writer.saving(fig, "fitPlot.gif", 100):
    for xval, yval in zip(x, y):
        x_pnt.append(xval)
        y_pnt.append(yval)
 
        lPnt.set_data(x_pnt, y_pnt)
        l.set_data(x_List, y_List)
 
        writer.grab_frame()
        writer.grab_frame()
 
    for x_val, y_val in zip(xline, xline):
        x_List.append(x_val)
        y_List.append(y_val)
 
        lPnt.set_data(x_pnt, y_pnt)
        l.set_data(x_List, y_List)
 
        writer.grab_frame()
 
    for i in range(10):
        writer.grab_frame()

效果图如下

 到此这篇关于使用matplotlib创建Gif动图的实现的文章就介绍到这了,更多相关matplotlib创建Gif动图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 对xml解析的示例

    python 对xml解析的示例

    这篇文章主要介绍了python 如何对xml解析,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-02-02
  • Python使用Pandas生成日报的实现代码

    Python使用Pandas生成日报的实现代码

    Pandas是Python中一个强大的数据处理库,它提供了许多功能强大的数据结构和数据分析工具,在本文中,我们将介绍Pandas的基本概念和如何使用它生成一个包含今天到未来20个工作日的日期列表的Excel文件,需要的朋友可以参考下
    2023-11-11
  • python获取交互式ssh shell的方法

    python获取交互式ssh shell的方法

    今天小编就为大家分享一篇python获取交互式ssh shell的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • PyQt使用QPropertyAnimation开发简单动画

    PyQt使用QPropertyAnimation开发简单动画

    这篇文章主要介绍了PyQt使用QPropertyAnimation开发简单动画,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • python实现RGB与YCBCR颜色空间转换

    python实现RGB与YCBCR颜色空间转换

    这篇文章主要介绍了python实现RGB与YCBCR颜色空间转换,RGB与YCbCr颜色空间概念的与变换关系,包括内容灰度值和亮度的关系、RGB颜色空间与颜色控制、YCbCr颜色空间及与RGB的变换关系,需要的小伙伴可以参考一下
    2022-03-03
  • 如何使用Python自动生成报表并以邮件发送

    如何使用Python自动生成报表并以邮件发送

    这篇文章主要介绍了如何使用Python自动生成报表并以邮件发送,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-10-10
  • Python函数式编程之面向过程面向对象及函数式简析

    Python函数式编程之面向过程面向对象及函数式简析

    这一番我们要学习点有难度的了,因此将降低阅读与理解难度,尽量采用大白话为你铺垫,因为涉及的一些概念也是借鉴的其它编程语言的风格,而且实际落地中存在部分争议不过多学一点,总是没有坏处的
    2021-09-09
  • Python错误处理操作示例

    Python错误处理操作示例

    这篇文章主要介绍了Python错误处理操作,结合实例形式分析了Python使用try...except...finaly语句进行错误处理的相关操作技巧与注意事项,需要的朋友可以参考下
    2018-07-07
  • Python实现使用卷积提取图片轮廓功能示例

    Python实现使用卷积提取图片轮廓功能示例

    这篇文章主要介绍了Python实现使用卷积提取图片轮廓功能,涉及Python数值运算与图像处理相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • 详谈python http长连接客户端

    详谈python http长连接客户端

    下面小编就为大家带来一篇详谈python http长连接客户端。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论