看過很多大佬繪製過中國地圖,有R-ggplot[1]的,也有python-geopandas[2]等,還有其他cartopy等的作圖包,我就不一一舉例了,今天我用python的proplot這個包,這個包的簡介可以參考連結proplot[3],主要的知識點如下:
* cartopy繪製中國地圖
* ax.inset添加南海子圖
導入需要的包
import osimport numpy as npimport xarray as xrimport proplot as plotimport cartopy.crs as ccrsfrom cartopy.io.shapereader import Readerimport maskoutshp_path = 'D:/China_shp'
導入數據
* 以歷史氣溫數據為例(historical)ds = xr.open_dataset('*historical*.nc')tas = ds['tas'][75] tas -= 273.15lon = ds.lonlat = ds.latlon_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)主圖
fig, axs = plot.subplots(width=6,proj=ccrs.PlateCarree())
ax = axs[0]m = ax.contourf(tas_region, cmap='CoolWarm', levels=levels, extend='both') 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,)
添加南海子圖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這個包太強大了,在這裡我就不一一細說了,本人也是新手初學哈哈!共同學習,那就這樣吧!(時間緊,任務重/奮鬥臉),寫這個就當是拋磚引玉吧!新手初學,難免有錯誤,希望大家多多指教!引用
[1] https://mp.weixin.qq.com/s?__biz=MzA5ODk0NjA1Mg==&mid=2247487028&idx=1&sn=24c7d04cbd4377ca4eb30129813f306f&scene=21#wechat_redirect
[2] https://mp.weixin.qq.com/s/YD88bNk4msg_IMXSuerXAg
[3] https://proplot.readthedocs.io/en/latest/