Python气象处理绘图第四弹--裁剪nc文件

Python气象处理绘图第四弹–裁剪nc文件


利用shp裁剪nc文件

  • Python气象处理绘图第四弹--裁剪nc文件
  • 前言
  • 一、常用裁剪思路?
  • 二、使用步骤
    • 1.读取数据
    • 2.裁剪数据并绘制图形
  • 参考链接


前言

在处理nc文件的过程中,有时需要对nc文件的数据在时间、经度、纬度进行裁剪处理,提取出自己感兴趣的部分。这就需要用到掩膜mask等处理手段,针对不同的结果有不同的方法进行处理。本文利用ERA5月平均数据,裁剪青藏高原范围的nc文件,并绘制空间分布图。


一、常用裁剪思路?

  1. 参考前文黄河流域部分,先进行nc文件的指标处理,再进行clip
  2. 参考本文,直接运用salem将不感兴趣的部分处理为nan

二、使用步骤

1.读取数据

代码如下(示例):

import warnings
warnings.filterwarnings("ignore")
import cartopy.crs as ccrs
import pandas as pd
import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import cartopy.mpl.ticker as cticker
from cartopy.io.shapereader import Reader
import cmaps
data1=xr.open_dataset('E:/CORDEX-TP/DATA/ERA-1981-2015-T-P.nc')
tas01=data1.t2m
tas01=tas01[:,::-1,:]-273.15
lon = np.arange(69.75, 140.5, 0.25)
lat = np.arange(14.75, 55.5, 0.25)

2.裁剪数据并绘制图形

代码如下(示例):

import geopandas as gpd
import salem
shp = "E:/shapefile/青藏高原/青藏高原边界数据总集/TPBoundary_new(2021)/TPBoundary_new(2021).shp"
# 创造掩膜数据
tp_shp=gpd.read_file(shp)
tas01_tp=tas01.salem.roi(shape=tp_shp)
print(tas01_tp)
tas01_tp=tas01_tp.mean(dim='time')
leftlon, rightlon, lowerlat, upperlat = (67,105,24,38)
img_extent = [leftlon, rightlon, lowerlat, upperlat]
clevels=np.arange(-20,24,4)
fig = plt.figure(figsize=(16,16),dpi=300)
ax1=fig.add_subplot(111,projection = ccrs.PlateCarree())
ax1.set_extent(img_extent, crs=ccrs.PlateCarree())
ax1.set_xticks(np.arange(leftlon,rightlon+spec1,spec1), crs=ccrs.PlateCarree())
ax1.set_yticks(np.arange(lowerlat,upperlat+spec2,spec2), crs=ccrs.PlateCarree())
lon_formatter = cticker.LongitudeFormatter()
lat_formatter = cticker.LatitudeFormatter()
ax1.xaxis.set_major_formatter(lon_formatter)
ax1.yaxis.set_major_formatter(lat_formatter)
ax1.tick_params(labelsize=10)
labels = ax1.get_xticklabels() + ax1.get_yticklabels()
[label.set_fontname('Arial') for label in labels]
ac=ax1.contourf(lon,lat, tas01_tp,clevels,cmap=cmaps.temp_19lev,
extend = 'both', transform=ccrs.PlateCarree() )
ax1.tick_params(labelsize=14)
ax1.add_geometries(Reader('E:/shapefile/青藏高原/青藏高原边界数据总集/TPBoundary_new(2021)/TPBoundary_new(2021).shp').geometries(),
crs=ccrs.PlateCarree(), facecolor='none',edgecolor='k',linewidth=1)
ax1.set_ylabel('CN05',fontsize=18)
position2=fig.add_axes([0.2, 0.2, 0.6, 0.018])#位置[,,,]  0.25, 0.35, 0.5, 0.014
cb=plt.colorbar(ac,cax=position2,orientation='horizontal',shrink=0.75,aspect=20,fraction=.03,pad=0.02)#方向   
cb.set_ticks(np.arange(-20,24,4))            #设置colorbar范围和刻度标记间隔
position2.set_title('℃',loc = 'right',fontsize=14,weight = 'normal')
cb.ax.tick_params(labelsize=8, direction='in', right=False)

Python气象处理绘图第四弹--裁剪nc文件_第1张图片


参考链接

  1. Python利用shp剪裁nc/tif数据(14)
  2. NCLcmaps

你可能感兴趣的:(python,开发语言)