获取nc数据的相关信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
from netCDF4 import Dataset import numpy as np import pandas as pd import os import matplotlib.pyplot as plt path = "F:\\OCO2.SIF.all.daily.2001.nc" csv_path = "F:\\test.csv" dst = Dataset(path, mode = 'r' , format = "netCDF4" ) print (dst.variables.keys()) data = dst.variables[ 'all_daily_sif' ][:] print (data.shape) # 输出结果如下: # dict_keys(['lat', 'lon', 'doy', 'all_daily_sif']) # (92, 360, 720) #可见有92个时间序列,经度(lon)、纬度(lat)的取值有720,360个 # # 查看数据经纬度范围,经度-179.75~179.75,其中负值为西经,正值为东经;纬度正为北纬,负为南纬 # # 格点分辨率为0.5度 long = dst.variables[ 'lon' ][:] lati = dst.variables[ 'lat' ][:] print ( long [ 0 ], long [ - 1 ], lati[ 0 ], lati[ - 1 ]) print ( long .shape, lati.shape) |
绘图
用matplotlib绘图
参考文献1
1
2
3
4
5
|
# plt对某个doy的全球sif值作图。左半部分为西半球,右边是东半球 # 选了doy为10的sif数据作图 plt.contourf( long , lati, data[ 10 , :, :] ) plt.colorbar(label = "Sif" , orientation = "horizontal" ) plt.show() |
运行结果:
用Basemap绘图
参考文献2
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
|
from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt lat = dst.variables[ 'lat' ][:] lon = dst.variables[ 'lon' ][:] data = dst.variables[ 'all_daily_sif' ][:] data[ 10 ] = data[ 10 ] # use .shape function to check that arrays have # the correct size. # e.g. lon.shape print (data[ 10 ].shape) lon0 = lon.mean() lat0 = lat.mean() # 设置投影方式:cyl为圆柱投影、还可设置merc为mercator投影 llcrnrlat为起始lat;urcrnrlat为终止lat # m = Basemap(projection='merc', llcrnrlat=lat[0], urcrnrlat=lat[-1], \ # llcrnrlon=lon[0], urcrnrlon=lon[-1], ax=ax1) # 参数 "resolution" 用于控制地图面积边缘的精细程度,有'l'和'h'两种取值 m = Basemap(lat_0 = lat0, lon_0 = lon0,projection = 'cyl' ,resolution = 'l' ) # 绘制等经纬度线 纬度每隔20度画一条线,且标注经纬度 m.drawparallels(np.arange( - 90. , 91. , 20. ), labels = [ 1 , 0 , 0 , 0 ], fontsize = 10 ) m.drawmeridians(np.arange( - 180. , 181. , 40. ), labels = [ 0 , 0 , 0 , 1 ], fontsize = 10 ) m.drawcoastlines() # 绘制海岸线 # m.drawcountries(linewidth=0.25) # 绘制国界线 # m.readshapefile('F:\E\data\grass_yield\shp\quhua\\省', 'states') # 读取中国各省边界,并绘图 lon, lat = np.meshgrid(lon, lat) xi, yi = m(lon, lat) # cmap是颜色,还可选‘jet'、‘spring'、‘winter'、'summer'、'autumn' cs = m.contourf(xi, yi, data[ 10 ], cmap = 'summer' ) # pad指位置, cbar = m.colorbar(cs, location = 'bottom' , pad = "10%" , format = '%.1f' ) # cbar = m.colorbar(C, 'right', ticks=np.arange(-128, 128, 40), format='%.1f') font1 = { 'family' : 'DejaVu Sans' , 'weight' : 'normal' , 'size' : 16 } plt.title( 'CSIF' , font1) plt.show() |
运行效果:
用Cartopy绘图
参考文献3
此前 Python 最常用的地图包是 Basemap,然而它将于 2020 年被弃用,官方推荐使用 Cartopy 包作为替代。Cartopy 是英国气象局开发的地图绘图包,实现了 Basemap 的大部分功能,还可以通过 Matplotlib 的 API 实现丰富的自定义效果。
安装Cartopy包
下载安装OSGeo4W4
参考文献:https://zhuanlan.zhihu.com/p/129351199
参考文献:https://blog.csdn.net/weixin_39618339的plt画图像图例的位置怎么写代码_用basemap画气象图
参考文献: https://zhajiman.github.io/
https://trac.osgeo.org/osgeo4w/
总结
到此这篇关于python读取nc数据并绘图的文章就介绍到这了,更多相关python读取nc数据绘图内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/suexisang/article/details/122768900