常见地图白化方法(二)

文摘   2024-07-17 09:00   河北  

前言

地图白化是一种绘制地图的技术,它可以实现对感兴趣区域以外的数据进行遮盖或填充白色的效果,从而突出显示目标区域的特征。
地图白化的原理是利用 shapefile 文件中的多边形坐标来创建一个剪切路径,然后将这个路径应用到 matplotlib 的绘图对象上,使得只有路径内的数据可见,路径外的数据被隐藏或覆盖。
气象家园的另一个五星上将clarmy在龙场悟道后开发了cnmaps库,解决广大地学学子绘制地图的痛点

环境:python3.9

方法三:cnmaps的clip_countours_by_map

from cnmaps import get_adm_maps, draw_maps, clip_contours_by_mapimport xarray as xrimport osimport numpy as npimport xarray as xrimport matplotlib.pyplot as pltimport cartopy.crs as ccrsimport cmapsnc = xr.open_dataset('/home/mw/input/1107125177/2023110720.nc')data= nc.t[0,7,:,:]lon=data.longitudelat=data.latitude
fig = plt.figure(figsize=(12, 8))ax = fig.add_subplot(projection=ccrs.PlateCarree())cf = ax.contourf(lon, lat, data,levels=np.arange(270,320,5), transform=ccrs.PlateCarree(), cmap=cmaps.radar)cr = ax.contour(lon,lat, data,levels=np.arange(270,320,5), colors='k')ax.clabel(cr, inline=1, fontsize=10, fmt="%i")#ax.add_geometries(shp.geometries(), proj, facecolor='none', edgecolor='k') #核心代码gd= get_adm_maps('广东省', only_polygon=True, record='first') clip_contours_by_map(cf, gd)draw_maps(get_adm_maps(level='省'), linewidth=0.8, color='k')
ax.set_extent([108,120,20,30])cb = plt.colorbar(cf, orientation='vertical', shrink=0.8)plt.show()

方法四:salem的salem.roi

import xarray as xrimport osimport numpy as npimport xarray as xrimport matplotlib.pyplot as pltimport cartopy.crs as ccrsimport cmapsimport geopandas as gpdimport salemimport cartopy.io.shapereader as shpreader##文件处理shp_path = '/home/mw/input/china1656/china_map/china_map/China_Province_2022.shp'shp = shpreader.Reader(shp_path)shpgpd = gpd.read_file(shp_path)gd = shpgpd[shpgpd['省'] == '广东省']gd.to_file('/home/mw/project/gd.geojson', driver='GeoJSON')js_path = '/home/mw/project/gd.geojson'gpdjs = gpd.read_file(js_path)## 绘图fig = plt.figure(figsize=(12, 8))ax = fig.add_subplot(projection=ccrs.PlateCarree())proj = ccrs.PlateCarree()## 核心代码datas = data.salem.roi(shape=gpdjs)cf = ax.contourf(lon, lat, datas,levels=np.arange(270,320,5), transform=ccrs.PlateCarree(), cmap=cmaps.radar_1)cr = ax.contour(lon,lat, datas,levels=np.arange(270,320,5), colors='k')ax.add_geometries(shp.geometries(), proj, facecolor='none', edgecolor='k') ax.clabel(cr, inline=1, fontsize=10, fmt="%i")ax.set_extent([108,120,20,30])cb = plt.colorbar(cf, orientation='vertical', shrink=0.8)plt.show()

可见锯齿的效果比较糟糕,经不住放大

方法三参考cnmaps快速入门
方法四参考这里

完整文件与代码

第八星系人造大气理论爱好者
记录与交流python、matlab等科研工具。记录与交流大气科学的学科知识
 最新文章