保姆级教程:python读取并绘制nc数据

 1.读取nc数据相关信息

import netCDF4
from netCDF4 import Dataset
ncfile = Dataset("/home/hsy/wrf-workstation/wrf-version4.4/WPS/geo_em.d01.nc")
ncfile
print(ncfile.variables.keys())

import matplotlib.pyplot as plt
long = ncfile["XLONG_M"][:]
long
lat = ncfile["XLAT_M"][:]
lat
HGT=ncfile["HGT_M"][:]
HGT.shape
long.shape
lat.shape

plt.contourf(HGT[0])
plt.colorbar(label="HGT_M", orientation="horizontal")
plt.show()

2.利用basemap绘图 

#利用basemap绘图

import netCDF4
from netCDF4 import Dataset
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np


ncfile = Dataset("/home/hsy/wrf-workstation/wrf-version4.4/WPS/geo_em.d01.nc")
ncfile

import matplotlib.pyplot as plt


#开始绘图
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111)
#设定标题
titleName = "geo land use"
#ax.set_title(titleName, pad=6, fontproperties = prop)

# 设置投影方式: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)
#添加中国地图图层
m.readshapefile("/home/hsy/03-datadownload/shpdata/china/china", "China_shp")
#添加大陆地图图层
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)           #生成网格点坐标矩阵

#print(lon,lat)
xi, yi = m(lon_do, lat_do)
#print(xi,yi)
m.plot(xi, yi, "go")   #绘制绿色点
#在指定位置标注文字
plt.text(xi, yi, "A1(%5.1fW, %3.1fN)" %(lon_do, lat_do))

 

3、利用cartopy绘图

利用cartopy绘图的详细内容,可以参考此链接: http://t.csdnimg.cn/GjYUb

import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
import cartopy.feature as cfeat
#import reader
#创建画布
proj = ccrs.LambertConformal()
fig = plt.figure(figsize=(15,7))
#创建投影轴
fig, ax = plt.subplots(1,1,subplot_kw={"projection":proj})
lat1=ncfile.variables["XLAT_M"][:]
lon1=ncfile.variables["XLONG_M"][:]
print(lon1[0].shape, lat1[0].shape)
ax.contourf(lon1[0], lat1[0],HGT[0])
filepath = "/home/hsy/03-datadownload/shpdata/china/china.shp"
readershp = shpreader.Reader(filepath)
readershp
geoms = readershp.geometries()
ax.add_geometries(geoms, proj, lw=0.5, fc="none")   #facecolor="none"前景色无。
readershp.close()
plt.show()

  • 16
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要使用Python读取nc文件并进行画图,你可以使用xarray库来处理数据,matplotlib库来进行绘图,以及cartopy库来绘制地图。首先,你需要导入这些库: ```python import xarray as xr import matplotlib.pyplot as plt import cartopy.crs as ccrs ``` 然后,你可以使用xarray的open_dataset函数打开nc文件,并获取需要的变量: ```python ds = xr.open_dataset('your_nc_file.nc') lat = ds.latitude lon = ds.longitude u = ds\['u'\] v = ds\['v'\] ``` 接下来,你可以使用matplotlib库来绘制风场图。你可以使用quiver函数来绘制风矢量图,其中u和v分别表示风场的U分量和V分量: ```python plt.quiver(lon, lat, u, v) plt.show() ``` 如果你还需要绘制地图,你可以使用cartopy库来设置地图投影和边界: ```python fig = plt.figure(figsize=(10, 6)) ax = plt.axes(projection=ccrs.PlateCarree()) ax.coastlines() ax.quiver(lon, lat, u, v, transform=ccrs.PlateCarree()) plt.show() ``` 这样,你就可以使用Python读取nc文件并进行画图了。希望对你有帮助! #### 引用[.reference_title] - *1* *3* [保姆教程python读取绘制nc数据](https://blog.csdn.net/A18040554844/article/details/127654490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python读取NC格式数据绘制风场和涡度图](https://blog.csdn.net/weixin_42372313/article/details/125527281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值