看过很多大佬绘制过中国地图,有R-ggplot的,也有python-geopandas等,还有其他cartopy
等的作图包,我就不一一举例了,今天用proplot这个包,这个包的简介可以参考链接proplot,主要的知识点如下:
-
proplot
绘制中国地图 -
ax.inset
添加南海子图
导入需要的包
import os
import numpy as np
import xarray as xr
import proplot as plot
import cartopy.crs as ccrs
from cartopy.io.shapereader import Reader
import maskout
shp_path = 'D:/China_shp'
导入数据
- 以历史气温数据为例(historical)
##### 数据读取
ds = xr.open_dataset('*historical*.nc')
tas = ds['tas'][75] # 随意选择的年份
#截取一段时间内的降水作为绘图的数据源
tas -= 273.15
lon = ds.lon
lat = ds.lat
lon_range = lon[(lon > 70) & (lon < 140)]
lat_range = lat[(lat > 0) & (lat < 60)]
tas_region = tas.sel(lon=lon_range, lat=lat_range)
levels = plot.arange(-5,30,5)
主图&白化[1]
fig, axs = plot.subplots(width=6,proj=ccrs.PlateCarree())
# First axis
ax = axs[0]
m = ax.contourf(tas_region,
cmap='CoolWarm',
levels=levels,
extend='both')
# 搜白化教程
# http://bbs.06climate.com/forum.php?mod=viewthread&tid=42437&highlight=%CD%EA%C3%C0%B0%D7%BB%AF
con_mask = maskout.shp2clip(m, ax, r'E:\maskout\country1.shp', ['China'])
ax.add_geometries(Reader(os.path.join(shp_path,
'bou2_4l.shp')).geometries(),
ccrs.PlateCarree(),
facecolor='none',
edgecolor='black',
linewidth=0.5)
ax.format(
coast=False, labels=True, borders=False,
latlim=(10, 60),
lonlim=(70, 140),
lonlines=10, latlines=10,
)
[1]地图白化
添加南海子图
# Create inset axes representing a "zoom-in"
# https://proplot.readthedocs.io/en/latest/insets_panels.html
iax = ax.inset([0.83,0,0.175,0.3]) # 不同的主图参数,这个参数设置也不一样,自己摸索
n = iax.contourf(tas_region,
cmap='CoolWarm',
levels=levels,
extend='both')
con_mask = maskout.shp2clip(n, iax, r'E:\maskout\country1.shp', ['China'])
iax.add_geometries(Reader(os.path.join(shp_path,
'bou2_4l.shp')).geometries(),
ccrs.PlateCarree(),
facecolor='none',
edgecolor='black',
linewidth=0.5)
iax.format(
coast=False, labels=False, borders=False,
latlim=(0, 26),
lonlim=(105, 125),
lonlines=10, latlines=10,
)
fig.colorbar(m, loc='r')
出图
总结
Proplot
这个包太强大了,在这里就不细说了!共同学习,那就这样吧!(时间紧,任务重/奋斗脸),写这个就当是抛砖引玉吧!希望大家多多指教!