前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常见地图白化方法(二)

常见地图白化方法(二)

作者头像
用户11172986
发布2024-06-20 18:05:54
560
发布2024-06-20 18:05:54
举报
文章被收录于专栏:气python风雨气python风雨

前言

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

环境:python3.9

方法三:cnmaps的clip_countours_by_map

代码语言:javascript
复制
代码语言:javascript
复制
from cnmaps import get_adm_maps, draw_maps, clip_contours_by_map
import xarray as xr
import os
import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cmaps
nc = xr.open_dataset('/home/mw/input/1107125177/2023110720.nc')
data= nc.t[0,7,:,:]
lon=data.longitude
lat=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

代码语言:javascript
复制
代码语言:javascript
复制
import xarray as xr
import os
import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cmaps
import geopandas as gpd
import salem
import 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()
代码语言:javascript
复制

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

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

点击链接完整代码在线运行

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 方法三:cnmaps的clip_countours_by_map
  • 方法四:salem的salem.roi
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档