Python||proplot 中国地图白化绘制

看过很多大佬绘制过中国地图,有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')

出图


China

总结

Proplot这个包太强大了,在这里就不细说了!共同学习,那就这样吧!(时间紧,任务重/奋斗脸),写这个就当是抛砖引玉吧!希望大家多多指教!

你可能感兴趣的:(Python||proplot 中国地图白化绘制)