使用matplotlib创建Gif动图的实现
作者:bashendixie5 发布时间:2021-03-09 11:32:02
标签: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()
效果图如下
来源:https://blog.csdn.net/bashendixie5/article/details/124234501
0
投稿
猜你喜欢
- 利用seek监控文件内容,并打印出变化内容:#/usr/bin/env python#-*- coding=utf-8 -*-pos = 0
- 数组排序排序是指将元素按有序顺序排列。有序序列是拥有与元素相对应的顺序的任何序列,例如数字或字母、升序或降序。NumPy ndarray 对
- 我们继续学习Python异步编程,这里将介绍异步Web框架sanic,为什么不是tornado?从框架的易用性来说,Flask要远远比tor
- 本文实例总结了Python3.5字符串常用操作。分享给大家供大家参考,具体如下:一、输入与输出#输入与输出str = input("
- 大家好,今天在写代码的时候,遇到了这样一种情况。我有如下所示的几个类用来存放程序配置(其实当做命名空间来用,同时感觉能够继承方便一点),im
- 微信小程序与php 实现微信支付的简单实例小程序访问地址:payfee.PHP:include 'WeixinPay.php'
- WSGI(Web Server Gateway Interface):Web服务网关接口,是Python中定义的服务器程序和应用程序之间的接
- 看youa的源码发现的,原来flash可以有fallback content:<object type="applicati
- 1.正则匹配数字,\为转义字符,d+为匹配一次或多次如下所示:返回的结果为列表2.正则匹配小数如下所示,返回的结果125.6为字符串总结&n
- 还是决定冠上ajax的头衔,毕竟很多人会用这个关键词搜索。虽然我认为这只是个炒作的概念,不过不得不承认ajax叫起来要方便多了。ajax的意
- 要求必备知识熟悉基本编程环境搭建。运行环境windows 7(64位);php-5.3; memcached-1.2.6下载地址环境下载什么
- 文件操作此为本人学习python过程中的笔记,将持续更新,欢迎提问指正。1.txt文件1.文本文件 txt2.二进制文件 图片视频操作流程打
- PDOStatement::fetchColumnPDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。
- 一、前言很多时候,我们都有远程控制电脑的需求。比如正在下载某样东西,需要让电脑在下载完后关机。或者你需要监控一个程序的运行状况等。今天我们就
- 目前SQL INJECTION的攻击测试愈演愈烈,很多大型的网站和论坛都相继被注入。这些网站一般使用的多为SQL SERVER数据库,正因为
- 概述基于Swoole的websocket服务,再之前的消息系统系列的第4篇,实现了更加复杂的业务场景,是对消息推送的完善和优化,代码本身就是
- 介绍本篇将介绍Python3中的迭代器与生成器,描述可迭代与迭代器关系,并实现自定义类的迭代器模式。迭代的概念上一次输出的结果为下一次输入的
- 1.__new__(cls, *args, **kwargs) 创建对象时调用,返回当前对象的一个实例;注意:这里的第一个参数是
- 最近在做个大数据量的录入,为了方便客户输入,需要通过方向键来移动到输入框中,本代码仅供学习、研究,请勿用于其它用途:D下面贴的代码只是贴出来
- 由于代码比较短,这里就不进行注释了代码如下:<% '当目标页面的包含文件即#include的页面里边存在respon