发不了Science?那是因为你不会画Science风格的配图
Part1大清帝国十四将军简介
清朝共设驻防将军十四人,分别为盛京将军、吉林将军、黑龙江将军、绥远城将军、伊犁将军、江宁将军、福州将军、杭州将军、荆州将军、西安将军、宁夏将军、成都将军、广州将军、乌里雅苏台将军。其中盛京、吉林、黑龙江、伊犁、乌里雅苏台五地为将军辖区。
清朝的驻防将军分为内地和边疆两类。
内地驻防将军包括:
江宁将军:驻地南京,分管四千余人的八旗兵。
福州将军:驻地福建,管理八旗兵。
杭州将军:驻地杭州,管理八旗兵。
荆州将军:驻地湖北荆州,管理八旗兵。
西安将军:驻地西安,管理陕西的八旗军务。
宁夏将军:驻地宁夏,管理当地的八旗兵。
成都将军:驻地成都,管理四川的八旗兵和绿营兵。
广州将军:驻地广州,管理当地的八旗兵。
绥远城将军:驻地绥远城(今呼和浩特),管理当地的八旗兵。
边疆驻防将军包括:
盛京将军:驻地沈阳,管理东北地区的军民事务。
吉林将军:驻地吉林乌拉,管理吉林省中东部地区。
黑龙江将军:驻地黑龙江,管理黑龙江地区的军民事务。
乌里雅苏台将军:驻地乌里雅苏台(今蒙古国扎门乌德),管理蒙古地区的军民事务。
伊犁将军:驻地伊犁,管理新疆地区的军民事务。
Part2Python绘制清朝十四将军驻地
import numpy as np
import matplotlib.pyplot as plt
import xarray as xr
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.io.shapereader import Reader
import pandas as pd
from matplotlib import rcParams
config = {"font.family":'Times New Roman',"font.size":19,"mathtext.fontset":'stix'}
rcParams.update(config)
# 读取全球地形数据
with xr.open_dataset('./ETOPO2v2g_f4.nc') as ds:
ds = ds.sel(x=slice(60, 150), y=slice(0, 60))
lon, lat = np.meshgrid(ds['x'], ds['y'])
dem = ds['z'].to_numpy()
region=[60, 150, 0, 60]
proj=ccrs.PlateCarree()
fig=plt.figure(figsize=(16,9),dpi=600)
ax = plt.axes(projection = proj)
ax.set_extent(region, crs = proj)
ax.stock_img()
ax.add_feature(cfeature.COASTLINE.with_scale('50m'),linewidth=0.5,zorder=2,color='k')# 添加海岸线
ax.add_feature(cfeature.OCEAN.with_scale('50m'))
ax.add_feature(cfeature.LAND.with_scale('50m'))
ax.add_feature(cfeature.LAKES.with_scale('50m'))
# 在画布上绘图,这个叫axes,这不是坐标轴喔
tick=np.arange(0,6001,1000)
cs=ax.pcolormesh(lon,lat,dem,transform=ccrs.PlateCarree(),cmap=custom_cmap,vmin=0,vmax=6000)
import geopandas as gpd
gdf=gpd.read_file('./qing_c8.shp',encoding='utf-8')
import cartopy.mpl.patch as cmp
paths=cmp.geos_to_path(list(gdf['geometry']))
import matplotlib.path as mpath
clip_path=mpath.Path.make_compound_path(*paths)
cs.set_clip_path(clip_path,transform=ax.transData)
cbar=plt.colorbar(cs,ticks=tick,shrink=0.98,orientation='vertical',extend='both',pad=0.01,aspect=30)
cbar.ax.tick_params(labelsize=18,direction='in',right=False)
font3={'family':'SimHei','size':18,'color':'k'}
cbar.set_label('海拔高度/(m)',fontdict=font3)
ax.set_xticks(np.arange(region[0], region[1] + 1, 10), crs = proj)
ax.set_yticks(np.arange(region[-2], region[-1] + 1, 10), crs = proj)
ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label=False))
ax.yaxis.set_major_formatter(LatitudeFormatter())
ax.add_geometries(Reader(r'./river1.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='b',linewidth=1)
ax.add_geometries(Reader(r'./Export_Output.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=1)
ax.add_geometries(Reader(r'./nineline.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=1)
ax.add_geometries(Reader(r'./ne_50m_lakes.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)
ax.add_geometries(Reader(r'./1级河流.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='RoyalBlue',linewidth=0.4)
ax.add_geometries(Reader(r'./2级河流.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='DodgerBlue',linewidth=0.3)
ax.add_geometries(Reader(r'./3级河流.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='DeepSkyBlue',linewidth=0.2)
ax.add_geometries(Reader(r'./4级河流.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='SkyBlue',linewidth=0.15)
ax.add_geometries(Reader(r'./5级河流.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='LightSkyBlue',linewidth=0.05)
ax.add_geometries(Reader(r'./主要湖泊.shp').geometries(),ccrs.PlateCarree(),edgecolor='none',linewidth=0,facecolor='#BEE8FF')
font4={'family':'SimHei','size':11,'color':'r'}
df1 = pd.read_excel(r"./qing14.xlsx")
lat = df1['lat']
lon = df1['lon']
plt.scatter(df1['lon'].values,df1['lat'].values,marker='o',s=18,color ="r")
for i, j, k in list(zip(df1['lon'].values, df1['lat'].values, df1['name1'].values)):
plt.text(i+0.12,j-0.2,k,fontdict=font4)
font3={'family':'SimHei','size':18,'color':'k'}
plt.ylabel("纬度",fontdict=font3)
plt.xlabel("经度",fontdict=font3)
ax.set_title("大清帝国十四将军辖区",fontdict=font3)
plt.savefig('./plot359.png',dpi=800,bbox_inches='tight',pad_inches=0)
plt.show()