python 如何绘制动图(将300张图片生成gif动画)

简介: 最近,在绘制SST月均数据时,突然想看看近几十年sst的大致变化过程。说白了就是绘制一张gif动画,也算是学习过程啦。

最近,在绘制SST月均数据时,突然想看看近几十年sst的大致变化过程。说白了就是绘制一张gif动画,也算是学习过程啦。


大概思路就是:

首先生成你的图片,然后将生成的所有图片汇总为一个gif文件。


关于数据,我这里使用的是SST月平均数据,说白了就是每年12个月,应该绘制12个图片。

有多少年,就生成year*12张图片。

当然,部分年份可能没有完整的12月,但是咱这里不考虑太多,就是生成图片然后绘制gif动画而已。


代码主要如下,分为两个部分:部分细节大家感兴趣的可以再修整,或者私聊我进行讨论都可以~·

import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import numpy as np
import xarray as xr
import os
data=xr.open_dataset('..\\sst.mnmean.nc')#读取数据
data = data.sortby("lat", ascending= True)#将纬度按照升序排列
sst=data.sel(lat=slice(-20.5,20.5),time=slice("1982", "2019"))#挑选想看的年份和经纬度范围
lon=sst.lon.data#读取lon数据
lat=sst.lat.data
plt.rcParams['font.family']='Times New Roman'
plt.rcParams['font.size']=15
day=np.arange(0,456)
#循环绘图
for i in day:
    fig=plt.figure(figsize=(20,12))
    proj=ccrs.PlateCarree(central_longitude=180)
    ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree(central_longitude =180))
    cb=ax.contourf(lon,lat,sst.sst.data[i],transform= ccrs.PlateCarree(),\
               cmap=('RdBu_r'),levels=np.arange(20,35))
    ax.add_feature(cfeature.NaturalEarthFeature('physical', 'land', '50m', \
            edgecolor='white', facecolor='white',zorder=2))
    ax.set_xticks(np.arange(0, 361, 30),crs=ccrs.PlateCarree())
    ax.set_yticks(np.arange(-20, 40, 20),crs=ccrs.PlateCarree())
    ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label =False))#经度0不加标识
    ax.yaxis.set_major_formatter(LatitudeFormatter())#加上经纬度°E、N
    ax.tick_params(which='major', direction='inout', length=5, width=0.99,\
                   pad=12, bottom=True, left=True, right=False, top=False)
    ax.set_title('SST-'+str(i))
    ax.set_xlabel('Longitude')
    ax.set_ylabel('Latitude')
    plt.savefig('D:\\desktopppp\\month\\'+str(i)+'.png')#设置保存图片的位置
print('绘制完成')
#=====================绘制gif动画================================
import PIL
import numpy as np
image=[]
mon=np.arange(1,456)#图片的个数
for i in mon:
    new=PIL.Image.open('D:\\desktopppp\\month\\'+str(i)+'.png')
    image.append(new)
image[0].save('SST.gif',format='GIF',
     append_images=image[1: ],
     save_all=True,duration=0.5,
     loop=0)#相关参数设置可以网络搜索一下,duration是间隔速率
print('gif绘制完成')


第一部分代码运行结束后可以发现图片已经全部保存到指定路径啦:


e6d89c626c1242ad8f59f0598fa31324.png

第二部分代码运行结束后,发现gif图片也生成出来啦:


image.png


OK,简单记录一下~~

有兴趣的小伙伴们快去尝试一下吧~


相关文章
|
3月前
|
Python
Python实用记录(六):如何打开txt文档并删除指定绝对路径下图片
这篇文章介绍了如何使用Python打开txt文档,删除文档中指定路径的图片,并提供了一段示例代码来展示这一过程。
40 1
|
3月前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
111 0
|
3月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
190 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
3月前
|
Python
Python实用记录(四):os模块-去后缀或者改后缀/指定目录下图片或者子目录图片写入txt/csv
本文介绍了如何使用Python的os模块来操作文件,包括更改文件后缀、分割文件路径和后缀、将指定目录下的所有图片写入txt文档,以及将指定目录下所有子目录中的图片写入csv文档,并为每个子目录分配一个标签。
37 1
|
3月前
|
编解码 UED Python
Python批量修改指定目录下图片的大小名文章
Python批量修改指定目录下图片的大小名文章
24 1
|
3月前
|
iOS开发 MacOS Python
Python编程小案例—利用flask查询本机IP归属并输出网页图片
Python编程小案例—利用flask查询本机IP归属并输出网页图片
33 1
|
3月前
|
Python
Python实现图片的拼接
Python实现图片的拼接
22 0
|
程序员 API 计算机视觉
皮克斯动画特效太好,但特效师容易「手抖」,还好Python来帮忙
当谈论特效电影时,Python常常被我们所忽略,特效工作者小哥Dhruv Govil要为Python「平反」,他写了篇博客讲述了在动画电影制作的每一个环节,Python都能为特效师们提供极大的便利!
252 0
皮克斯动画特效太好,但特效师容易「手抖」,还好Python来帮忙
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。