当前位置: 首页 > news >正文

【Python实例】Python读取并绘制nc数据

【Python实例】Python读取并绘制nc数据

  • 准备:安装netCDF库等
  • 读取nc数据相关信息
  • 绘制图形
    • 利用basemap绘图
  • 参考

准备:安装netCDF库等

以【1960-2020年中国1km分辨率月降水数据集】中2020年降水为例。

先在Panopoly中查看数据属性,如下:
在这里插入图片描述
右键绘制图形,如下:
在这里插入图片描述

读取nc数据相关信息

Python代码如下:

import netCDF4
from netCDF4 import Dataset
import matplotlib.pyplot as plt
import numpy as np# 打开下载的.nc文件
ncfile = Dataset("D:/0 DataBase/CN_Prec_MonthlyMean_1km_2020.nc/CN_Prec_MonthlyMean_1km_2020.nc")
print(ncfile.variables.keys())# 读取变量
lat = ncfile.variables['latitude'][:]
long = ncfile.variables['longitude'][:]
[X, Y] = np.meshgrid(lat, long)    # 合成矩阵,将向量latitude和longitude定义的区域转换成矩阵X和Y
pre = ncfile.variables['pre'][:]
time = ncfile.variables['time'][:]# 绘制图形
plt.contourf(Y, X,pre[0])
plt.colorbar(label="MonthlyMean Precipitation", orientation="horizontal")
plt.show()# 关闭nc文件
ncfile.close()

输出属性如下:
在这里插入图片描述

绘制图形

利用basemap绘图

Python代码如下:

#利用basemap绘图
import netCDF4
from mpl_toolkits import basemap
from netCDF4 import Dataset
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np# 打开下载的.nc文件
ncfile = Dataset("D:/0 DataBase/CN_Prec_MonthlyMean_1km_2020.nc/CN_Prec_MonthlyMean_1km_2020.nc")# 读取变量
lat = ncfile.variables['latitude'][:]
long = ncfile.variables['longitude'][:]
[X, Y] = np.meshgrid(lat, long)    # 合成矩阵,将向量latitude和longitude定义的区域转换成矩阵X和Y
pre = ncfile.variables['pre'][:]
time = ncfile.variables['time'][:]# 创建一个图形和一个轴
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111)# 设定标题
titleName = "MonthlyMean Precipitation"# 初始化Basemap对象,设置地图参数
# 设置投影方式:cyl为圆柱投影、还可设置merc为mercator投影,lcc兰伯特投影等。
# 参数 "resolution" 用于控制地图面积边缘的精细程度,有 'crude', 'low' and'intermediate' resolution datasets are installed by default.
# 如果需要'high' or 'full' resolution dataset,需要`conda install -c conda-forge basemap-data-hires`.
m = Basemap(lat_1=30, lat_2=62, lon_0=103, projection='lcc', resolution='i',llcrnrlon=80, llcrnrlat=10, urcrnrlon=145, urcrnrlat=55)# 设置经纬度
# 绘制纬度坐标,纬度每隔10度画一条线,且左侧和右侧标注纬度。
m.drawparallels(np.arange(10., 55., 10.), labels=[1, 1, 0, 0], fontsize=10)
# 绘制经度坐标,经度每隔10度画一条线,且上侧和下侧标注经度。
m.drawmeridians(np.arange(70., 160., 10.), labels=[0, 0, 1, 1], fontsize=10)# 形状文件的路径
#shp_path = "D:/0 DataBase/0 GBA Database/Boundary_Projected"
# 添加中国地图图层
#m.readshapefile(shp_path,'Boundary_Projected', drawbounds=True)# 添加大陆地图图层
m.fillcontinents(color="coral", lake_color="blue")
# 设定海洋的颜色
m.drawmapboundary(fill_color="aqua")# 在指定位置绘制坐标点
lon_me = long.mean()
lat_me = lat.mean()
lon_do, lat_do = np.meshgrid(lon_me, lat_me)  # 生成网格点坐标矩阵# 转换经纬度到Basemap坐标系
xi, yi = m(lon_do, lat_do)
# print(xi,yi)
m.plot(xi, yi, "ro")  # 绘制红色点
# 在指定位置标注文字
plt.text(xi, yi, "A1(%5.1fW, %3.1fN)" % (lon_me, lat_me))# 关闭.nc文件
ncfile.close()# 显示图形
plt.show()

图形绘制如下:
在这里插入图片描述

参考

http://www.lryc.cn/news/457389.html

相关文章:

  • swift使用llama3.2-vision微调xray数据集
  • 学习小课堂
  • stm32学习笔记-RTC实时时钟
  • 简历中的期望薪资怎么定?
  • MySQL 中的 GROUP BY 使用
  • 在 ubantu 20.04 云服务器上基于 bochs 编译 linux0.11
  • docker-compose安装部署和使用
  • Java之静态
  • PCB缺陷检测数据集 xml 可转yolo格式 ,共10688张图片
  • 【linux开发-驱动】-设备树
  • 不动产证ocr识别场景解析、房产证识别API
  • gpg 密钥生成、导入、导出、自动输入密码
  • 新个性化时尚解决方案!Prompt2Fashion:自动生成多风格、类型时尚图像数据集。
  • 软件设计师——计算机网络
  • Python 实现电话号码和Email地址提取程序
  • JavaGuide(3)
  • 微信小程序15天
  • 用Python制作数据可视化仪表盘:使用Dash与Plotly构建实时交互式仪表盘
  • 干部管理系统:全面提升干部管理效能
  • Java之方法
  • MyBatis 数据表与实体映射的隐藏陷阱
  • leetcode-239. 滑动窗口最大值
  • springboot项目中开启mybatis的sql日志
  • 卷积的计算——nn.Conv2d(Torch.nn里的Convolution Layers模块里的Conv2d类)
  • 确保接口安全:六大方案有效解决幂等性问题
  • 代码随想录算法训练营第二十九天| 93. 复原 IP 地址,78. 子集, 90. 子集 II
  • 【WebGis开发 - Cesium】三维可视化项目教程---初始化场景
  • 点云中ICP算法的详解
  • 抽象类Abstart Class
  • Redis:通用命令 数据类型