基于Cartopy绘制海洋表面温度动态变化图


一、实验准备

啊我们这次需要用的库有:

  • cartopoy
  • xarray
  • imageio
  • numpy
  • pandas

如果发现cartopy安装不了,可以先在网站下载依赖库。

分别是:

  • pyproj
  • Pillow
  • Shapely
  • Cartopy

我们下载好对应Python版本和OS类型的.whl文件后,在anaconda prompt中输入以下命令:

pip install path\your_file.whl

即可。


关于海洋遥感数据,我们可以在https://podaac.jpl.nasa.gov/上下载数据,当然,NASA的这个网站可能需要科学上网。


二、数据处理

我们下载下来的文件是.nc文件,这个类型的文件可以用xarray或者netCDF4这两个库进行读取哦。下面我们展示xarray的读取方式。

# 导入库
import xarray as xr

值得一提的是,xarray有可能跟pytorch或者tensoflow产生冲突,尤其是torchtext库。这种情况下,可能需要对现有的依赖库进行更新。

# 读取数据
data = xr.open_dataset(d)

此时呢,数据就被我们读取进来啦。我们这次需要用到的值为SST(sea surface temperature),因此,我们需要获取到这个维度的数据。

sst = data.variables["sea_surface_temperature"][:] # 通过variables属性 选择对应维度的数据# 获取经纬度数据
lon = data.variables['lon'][:]
lat = data.variables['lat'][:]

这些数据符不符合规范,是一个值得注意的问题。我们发现,该文件的SST数据缺失了不少值,需要做一个清洗。

# 获取到DataFrame方便处理
sst = np.array(sst)
d = pd.DataFrame(sst[0])print(d.describe())
# 用平均值填充
d.fillna(d.mean(), inplace=True)

三、绘制图像

好啦我们现在要用到cartopy进行绘图啦~

# 之前拿到的数据是xarray类型的,我们需要转换到ndarry类型
lon,lat=np.array(lon),np.array(lat)
sst=d.values

设置我们地图的投影

    ax = plt.axes(projection=ccrs.PlateCarree())  # 设置投影方式extend=[-30,-16, -60, -46] # 设置显示范围ax.set_extent(extend)  # 设置经纬度范围ax.stock_img()#添加地球背景ax.add_feature(cfe.OCEAN) # 添加要素ax.add_feature(cfe.LAND,edgecolor='black')ax.add_feature(cfe.LAKES,edgecolor='black')ax.add_feature(cfe.RIVERS)rivers_10m = cfe.NaturalEarthFeature('physical', 'rivers_lake_centerlines', '10m')ax.add_feature(rivers_10m,facecolor="None",edgecolor='b')ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=0.2, color='k', alpha=0.5, linestyle='--') # 添加经纬网ax.coastlines() # 设置海岸线ax.set_title("我也不知是啥数据")levels = np.arange(sst.min(), sst.max()+ 1, 1) # 设置颜色分辨度cp=ax.contourf(lon,lat,sst,cmap='Spectral_r',levels=levels) # 绘制二维格网plt.colorbar(cp)# 设置色带plt.show()


四、动图制作

这里我们就需要使用到imageio模块了。

这里简单说一下如何通过imageio制作gif动图。

首先,我们需要通过imageio.imread()API读取图片数据,将其存放在容器列表中。再通过imageio.mimsave()进行制作。

# 定义一个创建gif的方法def create_gif(filelist,name,dur=1.0)->None:IMG=[]for i in filelist:IMG.append(imageio.imread(i))return imageio.mimsave(name,IMG,"GIF",duration=dur)

接着获取plt的图像资源

plt.savefig((val:=path+"%s.png"%time),dpi=200)
lis.append(val)# 释放资源
plt.close()

最终结果如下图啦,数据是随便拉的,所以对不太上


完整代码

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import cartopy.feature as cfe
import xarray as xr
import imageio
import numpy as np
import pandas as pd
import os# 创建gif图像
def create_gif(filelist,name,dur=1.0)->None:IMG=[]for i in filelist:IMG.append(imageio.imread(i))return imageio.mimsave(name,IMG,"GIF",duration=dur)def working(d,path,time,lis)->None:# 数据清洗''':param data: 数据:param path: 保存路径:param time: 名字吧:param lis: GIF文件夹:return:'''data = xr.open_dataset(d)sst = data.variables["sea_surface_temperature"][:]lon = data.variables['lon'][:]lat = data.variables['lat'][:]sst = np.array(sst)d = pd.DataFrame(sst[0])# print(d.describe())d.fillna(d.mean(), inplace=True)lon,lat=np.array(lon),np.array(lat)sst=d.valuesax = plt.axes(projection=ccrs.PlateCarree())  # 设置投影方式extend=[-30,-16, -60, -46]ax.set_extent(extend)  # 设置经纬度范围ax.stock_img()#添加地球背景ax.add_feature(cfe.OCEAN)ax.add_feature(cfe.LAND,edgecolor='black')ax.add_feature(cfe.LAKES,edgecolor='black')ax.add_feature(cfe.RIVERS)rivers_10m = cfe.NaturalEarthFeature('physical', 'rivers_lake_centerlines', '10m')ax.add_feature(rivers_10m,facecolor="None",edgecolor='b')ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=0.2, color='k', alpha=0.5, linestyle='--')ax.coastlines()ax.set_title("我也不知是啥数据")levels = np.arange(sst.min(), sst.max()+ 1, 1) # 设置绘画精度cp=ax.contourf(lon,lat,sst,cmap='Spectral_r',levels=levels)plt.colorbar(cp)# ax.set_xticks(np.arange(extend[0],extend[1],5))# ax.set_yticks(np.arange(extend[2],extend[3],5))plt.savefig((val:=path+"%s.png"%time),dpi=200)lis.append(val)# 释放资源喽plt.close()if __name__ == '__main__':plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# plt.rcParams['axes.unicode_minus'] = False  # Solve the minus sign problems   # 现在好像不设置也没有问题了?path=r"C:\"filelist=os.listdir(path)Time=[]filedata=[]for i,j in enumerate(filelist):if j.endswith(".nc"):Time.append(i)filedata.append(j)IMG=[]savePath=path+"SavePath\\"if not os.path.exists(savePath):os.makedirs(savePath)for i,j in enumerate(filedata):working(path+j,savePath,Time[i],IMG)create_gif(IMG,savePath+"New.gif",1.0)

【海洋遥感】绘制海洋表面温度动图相关推荐

  1. 【海洋遥感】海洋遥感/BGC Argo/南极磷虾/Python

    2022.2.2 首先,按照惯例来碎碎念一点.本来2020年暑假就开始做的课题,发病又休学又种种,结果拖到一年多才继续.为了不延期毕业,按时出国,在此记录一下课题完成的一些步骤.灵感.目标以及计划. ...

  2. 海洋遥感技术的内涵及特征

    定义: 海洋遥感(oceanographic remote sensing)是指将遥感技术运用于监测海洋及海岸带生态环境状况.对海表温度.海面高度.海面风场.海平面高度变化等的遥感观测技术成为物理海洋 ...

  3. matlab绘制海洋图

    MATLAB用于绘制图形效果非常好,所以一般的实验绘图都是由MATLAB完成,对于三维图形MATLAB也能很好地展示. 下面以一块三维曲面为例,绘制海洋图. 首先需要将三维曲面加载进工作空间,我们使用 ...

  4. python学习之matplotlib绘制动图(FuncAnimation()参数)

    1.函数FuncAnimation(fig,func,frames,init_func,interval,blit)是绘制动图的主要函数,其参数如下: a.fig 绘制动图的画布名称 b.func自定 ...

  5. 【用pandas_alive几行代码绘制竞赛动图】10.新南威尔士州 COVID 可视化(测试代码+数据集+绘图参数解析)

    目录 10.新南威尔士州 COVID 可视化 新南威尔士州 COVID 可视化API说明: 新南威尔士州 COVID 可视化数据集 新南威尔士州 COVID 可视化例程 总结 欢迎关注 『pandas ...

  6. html5canvas下绘制gif,JS+canvas操作gif动图

    这次给大家带来JS+canvas操作gif动图,JS+canvas操作gif动图的注意事项有哪些,下面就是实战案例,一起来看一下. HTML5 canvas可以读取图片信息,绘制当前图片.于是可以实现 ...

  7. canvas——绘制图片——动图制作

    图片: drawImage():将原图片像素的内容复制到画布上: 第一个参数是源图片,可以是img元素或Image构造函数创建的屏幕外图片对象: 三个参数时: 指定图片绘制的x.y坐标: 五个参数时: ...

  8. R语言绘制gif动图

    gapminder是我们要用到的数据,用gganimate来绘制gif动图 install.packages("gapminder") install.packages(" ...

  9. python matplotlib绘制gif动图以及保存

    python matplotlib绘制gif动图以及保存 标签: python matplotlib 谨以此文纪念我两天来的悲剧 昨天我用lstm拟合sin曲线,看到别人画的做的动图很好看,并且还能保 ...

最新文章

  1. 产业结盟 跨界共赢 | 新华三成为“中国联通物联网产业联盟” 首批成员
  2. redis学习(五) redis实现购物车
  3. php mongodb _id,PHP库 查询Mongodb中的文档ID的方法
  4. 通用权限管理设计 之 数据权限
  5. 浅入浅出 Android 安全:第四章 Android 框架层安全
  6. 珠海 第十届亚洲机器人锦标赛_滨和中学“VEX”团队斩获粤港澳机器人大赛多个大奖!...
  7. 服务器CPU X86 ARM PowerPC RISC介绍
  8. Bsdiff差分算法讲解
  9. 自学python编程笔记本推荐-python自学教程 | 3万字为你详解每个重要知识点
  10. ireport怎么套打_柳州男孩小指被螺母套牢,还有熊娃被卡进这地方!消防员笑抽,网友:日常打“卡”...
  11. java线程的状态改变(练习)
  12. 模型参考自适应控制器(MRAC)系列: 2.提升瞬态性能
  13. SIM868获取NTP时间
  14. 腾讯云服务器芯片,腾讯云星星海重磅发布首款自研GPU服务器 占据业界几宗“最”...
  15. 苹果mac系统隐藏文件的显示和取消显示
  16. android+单机button+设置背景图片,button设置点击更改背景图片
  17. *java面试题**
  18. relay_log_purge参数一则
  19. C语言——初识关键字、static、#define定义、指针
  20. 计算机硬件检测和数据恢复资料,探究职业学校计算机专业课程教学方案——以《计算机硬件检测维修与数据恢复》项目课程为例...

热门文章

  1. 苹果报告揭秘:你的个人隐私是这样泄露的
  2. 计算机类商品零售高速增长,【中银策略】行业景气跟踪:1月纺织服装类商品出口累计同比增14.6%...
  3. 抑郁症:抑郁症带来的危害 这几个特征希望你一个都没有
  4. 计算机专业评语,计算机专业学生自我评价
  5. 自学编程应该如何入门
  6. 阿宁的爬虫之旅----代理ip
  7. 过完年想要元气满满?赶紧看看这些VR AR大事件回个血
  8. 搜狗输入法技巧及快捷键
  9. js 前端实现禁用F11开发者工具和鼠标右键。
  10. vsnprintf()用法