目录

【总代码】(简易好理解版本,最后面还有个小升级版)

【解析】

一、相关库的安装

二、数据下载

三、代码解析

四、代码改进(小升级版本)

【总代码】(简易好理解版本,最后面还有个小升级版)

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
import netCDF4 as nc
from pyproj import Proj
import datetime as dt
import xarray as xr
import datetime as dtclass Sim1(object):def __init__(self,file_nc):self.file_obj = xr.open_dataset(file_nc)passdef Draw_vector(self,mon,n):u_mean,v_mean,speed = self.cal_mean(mon,n)m,xi,yi = self.bmap()m.quiver(xi[::4,::4],yi[::4,::4],u_mean[::4,::4],v_mean[::4,::4],speed[::4,::4],scale=180,color='r',width=0.002)#scale=80--80m/s设置为箭头单位强度plt.savefig(f'sim_{n}.png') passdef cal_mean(self,mon,n):u = self.file_obj.uv = self.file_obj.vu = u.loc[u.time.dt.month.isin(mon)]v = v.loc[v.time.dt.month.isin(mon)]u_mean = np.mean(u,axis=0)v_mean = np.mean(v,axis=0)speed = np.sqrt(u_mean**2 + v_mean**2)return u_mean,v_mean,speeddef bmap(self):m = Basemap(boundinglat=75, lon_0 = 0,projection = 'npstere', round=True)m.drawcoastlines(linewidth=0.5)m.drawstates() m.drawcountries() lons = self.file_obj.longitudelats = self.file_obj.latitudexi,yi = m(lons,lats)return m,xi,yia = Sim1('/mnt/g/st-nsidc/icemotion_daily_nh_25km_20210101_20211231_v4.1.nc')
a.Draw_vector(mon=range(1,13),n='2021')

【解析】

一、相关库的安装

首先大家的环境要有这些库

可以用conda list查询:

如果没有(例如没有netCDF4)则用pip install netCDF4或者conda install netCDF4安装对应的库。

二、数据下载

进入NSIDC官网:Homepage | National Snow and Ice Data Center (nsidc.org)

点击Explore Data

输入要下载的产品的名字:如sea ice motion

点击选择NetCDF格式,选择一个Parameter是SEA ICE MOTION的产品即可

(我选择了第一个Polar Pathfinder)

点进去往下滑,点击HTTPS

有南极北极两个文件夹,这里选择北极north

里面有四个文件夹,主要用的是daily(每日数据)和weekly(每周数据)

点击要下载的文件就好啦

三、代码解析

#定义一个类,这个类的功能就是完成海冰运动矢量制图
class Sim1(object):def __init__(self,file_nc):#初始化类,传入文件路径self.file_obj = xr.open_dataset(file_nc)#将文件传给对象的file_obj这个属性passdef Draw_vector(self,mon,n):#1️⃣画矢量图函数u_mean,v_mean,speed = self.cal_mean(mon,n) #算出U,V的平均值和合成速度(具体函数看下面)m,xi,yi = self.bmap() #得到地理地图m,和每个u,v经过投影后的xi,yi(具体函数看下面)m.quiver(xi[::4,::4],yi[::4,::4],u_mean[::4,::4],v_mean[::4,::4],speed[::4,::4],scale=180,color='r',width=0.002)#quiver函数画图,xi,yi为点的坐标,u_mean,v_mean为平均值,speed是合成速度,scale是设置箭头单位强度,color是设置颜色,width时设置箭头宽度,更多参数......plt.savefig(f'sim_{n}.png') #Linux系统用这个,Win用plt.show()passdef cal_mean(self,mon,n):2️⃣计算平均值函数u = self.file_obj.uv = self.file_obj.vu = u.loc[u.time.dt.month.isin(mon)] #将月份为mon的U选出来v = v.loc[v.time.dt.month.isin(mon)]u_mean = np.mean(u,axis=0) #计算选出来的u的平均值,axis=0是对第一维度求平均,axis=1对第二维度求平均,这里u的时间对应是第一维,所以是对第一维(时间)求平均v_mean = np.mean(v,axis=0)speed = np.sqrt(u_mean**2 + v_mean**2) #勾股定理求速度值的大小return u_mean,v_mean,speeddef bmap(self):3️⃣创建地图m = Basemap(boundinglat=75, lon_0 = 0,projection = 'npstere', round=True) #创建地理底图m.drawcoastlines(linewidth=0.5)#这三行是添加相应的地理要素 海洋线、国界等m.drawstates() m.drawcountries() lons = self.file_obj.longitude #将每个点的经纬度取出lats = self.file_obj.latitudexi,yi = m(lons,lats) #这样写就能转成m投影下对应的坐标了return m,xi,yia = Sim1('/mnt/g/st-nsidc/icemotion_daily_nh_25km_20210101_20211231_v4.1.nc') #文件路径
a.Draw_vector(mon=range(1,13),n='2021') #mon输入要求平均的月份,n是图像名字的后缀(如mon=345,n='spring')

运行结果如下:

年平均(mon=rang(1,13),n='2021')

春季平均(mon=(3,4,5),n='spring')

四、代码改进(小升级版本)

功能实现:

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
import netCDF4 as nc
from pyproj import Proj
import datetime as dt
import xarray as xr
import datetime as dt
import cartopy.crs as ccrsclass Sim1(object):def __init__(self,file_nc):self.file_obj = xr.open_dataset(file_nc)passdef Draw_vector(self,mon,n):u_mean,v_mean,speed = self.cal_mean(mon,n)m,xi,yi = self.bmap()m.quiver(xi[::4,::4],yi[::4,::4],u_mean[::4,::4],v_mean[::4,::4],speed[::4,::4],scale=180,color='r',width=0.002)#scale=80--80m/s设置为箭头单位强度plt.title(f'{n}',x=0.5,y=-0.15 ,color='b',size=7.5)#plt.savefig(f'sim_{n}.png') passdef cal_mean(self,mon,n):u = self.file_obj.uv = self.file_obj.vu = u.loc[u.time.dt.month.isin(mon)]v = v.loc[v.time.dt.month.isin(mon)]u_mean = np.mean(u,axis=0)v_mean = np.mean(v,axis=0)speed = np.sqrt(u_mean**2 + v_mean**2)return u_mean,v_mean,speeddef bmap(self):m = Basemap(boundinglat=75, lon_0 = 0,projection = 'npstere', round=True)m.drawcoastlines(linewidth=0.5)m.drawstates() m.drawcountries() m.drawmeridians(np.arange(0, 360, 30),labels=[True,True,False,False],size=5, latmax=90) m.drawparallels(np.arange(75, 90, 5),labels=[False,False,True,False],size=5)lons = self.file_obj.longitudelats = self.file_obj.latitudexi,yi = m(lons,lats)return m,xi,yi

调用函数:

a = Sim1('/mnt/g/st_NSIDC/icemotion_daily_nh_25km_20210101_20211231_v4.1.nc')fig = plt.figure(figsize=[6, 6])ax1 = fig.add_subplot(2, 2, 1)
ax1 = a.Draw_vector(mon=(3,4,5),n='spring')
ax2 = fig.add_subplot(2, 2, 2)
ax2 = a.Draw_vector(mon=(6,7,8),n='summer')
ax3 = fig.add_subplot(2, 2, 3)
ax3 = a.Draw_vector(mon=(9,10,11),n='autumn')
ax4 = fig.add_subplot(2, 2, 4)
ax4 = a.Draw_vector(mon=(1,2,12),n='winter')fig = fig.tight_layout(pad=2, w_pad=0.8, h_pad=0.8)
plt.suptitle('SIM_2021')
##主图titlell???plt.savefig('SIM_2021.png',dpi=400) 

结果图:

NSIDC海冰运动产品-速度矢量场图绘制(数据下载和处理--年、季节平均)【python/basemap】相关推荐

  1. python 速度矢量_Python TVTK 标量数据可视化与矢量数据可视化

    Python数据可视化分为 标量可视化,矢量可视化,轮廓线可视化 标量又称无向量,只有大小没有方向,运算遵循代数运算法则比如质量,密度,温度,体积,时间 矢量又称向量,它是由大小,方向共同确定的量,运 ...

  2. 【MATLAB】绘制矢量场图

    Step 1 在MATLAB中绘制矢量场图的函数是quiver,利用help命令查看该函数的解释. 一般来说,输入参数可以是四个(x,y,u,v),也可以是两个参数(u,v),要求是这些参数都大小相同 ...

  3. python画车辆轨迹图_如何利用 Python 绘制酷炫的 车辆轨迹 — 速度时空图?三维数据用二维图像呈现...

    说明:本文系交通攻城狮原创文章,如需转载请私信联系,侵权必究. 2020,第 30 期,编程笔记 建议直接阅读精编版:如何利用 Python 绘制酷炫的 车辆轨迹 - 速度时空图?三维数据用二维图像呈 ...

  4. 【ParaView教程】第四章 常见问题 —— 2D速度矢量怎样在ParaView中绘制流线?

    问题背景 有时一些算例结果是二维的,相应的速度也是二维的,只有x,y两个方向的分量.在ParaView中加载结果后如果想要绘制流线,会发现此时的流线绘制按钮Stream Tracer灰掉了,功能不可用 ...

  5. Matlab绘制方向和速度矢量图

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  6. JAVA整合Milvus矢量数据库及数据

    背景:目前milvsu版本迭代至2.0,已经可以支持直接在docker环境下运行 目录 一.Milvus的基本情况 什么是 Milvus 向量数据库? 非结构化数据 特征向量 向量相似度检索 为什么选 ...

  7. Cesium设置模型朝向速度矢量方向

    Cesium设置模型朝向速度矢量方向 文章目录 Cesium设置模型朝向速度矢量方向 1. 需求场景 2. 技术路线 2.1 VelocityOrientationProperty 2.2 Veloc ...

  8. ArcGIS实验操作一:绘制自定义线、垂直、平行线(附实验数据下载)

    本专栏整理自汤国安.钱柯健.熊礼阳等教授编著的<地理信息系统基础实验操作100例>,感谢! 文章目录 一.实验背景 二.实验数据 三.实验步骤 1.准备数据 2.数字化线 3.绘制固定端点 ...

  9. Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况)

    Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况) #仿真数据 import pandas as pd import numpy a ...

最新文章

  1. 一文详述Attention最新进展
  2. 技术人员如何参与产品设计讨论:激活那一潭死水
  3. 矩阵分析与多元统计12 0-1矩阵 交换矩阵简介
  4. python itertool_函数式编程的Python实践(2):Itertool
  5. C语言实现一个随机测试加减乘除,编写程序:C语言实现一个随堂测试,能进行加减乘除运算...
  6. python 获取键盘输入、同时有超时的功能_python 获取键盘输入,同时有超时的功能示例...
  7. 技术实践丨基于MindSpore框架Yolov3-darknet模型的篮球动作检测体验
  8. html财务统计,财务统计.html · 举子/layuiadmin-templete - Gitee.com
  9. 分享17个网页设计中字体排版的优秀示例
  10. 数据库性能优化之SQL语句优化(下)
  11. Go 程序是如何编译成目标机器码的
  12. 软件项目管理 project 实验
  13. ubuntu 服务器 ip修改,修改Ubuntu server ip地址
  14. html表格的冻结列
  15. 学了计算机很迷茫怎么办?计算机大三学生怎么找实习工作?
  16. docker的一些使用技巧
  17. SEO诊断案例-崔凯博客
  18. 在我的网站   Φ十三月网Φ  开站前的宣传,当我是炒作,造势都可以,但是我们要的是有内涵。
  19. 粉笔公考——判断推理
  20. 一位优秀前端工程师的简历应该怎么写?

热门文章

  1. php 抓取动态网页_PHP-php如何抓取动态页面的数据
  2. 内网xshell传输文件命令_Xshell 上传文件到服务器 以及常用的lunix 命令
  3. 如何将OFD文件转换成Word?这样转换如此简单
  4. HTML_05_颜色
  5. keepalive部署--双VIP
  6. JS 字符串替换特定子串
  7. GitLab实现持续集成
  8. 【最新干货】抖音短视频如何运营?
  9. 初级C语言之【循环语句】(保姆级教程)
  10. jumpserver 使用教程_jumpserver的使用