import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from matplotlib import rcParams
from cartopy.io import shapereader as shpreader
config = {"font.family": 'Times New Roman',
"font.size": 14, "mathtext.fontset": 'stix'}
rcParams.update(config)
# 读取全球地形数据
ds = xr.open_dataset("D:\shp文件\ETOPO2v2c_f4.nc")
# 准备用于绘图的数据
lon = np.linspace(min(ds['x'].data), max(
ds['x'].data), len(ds['x'].data)) # 经度
lat = np.linspace(min(ds['y'].data), max(
ds['y'].data), len(ds['y'].data)) # 纬度
dem = ds['z'].data
# 构建经纬网格
lon, lat = np.meshgrid(lon, lat)
# 设置地图全局属性
fig = plt.figure(1, figsize=[16, 9])
proj = ccrs.PlateCarree()
ax = plt.subplot(1, 1, 1, projection=proj)
extent = [105, 112, 31, 40]
ax.set_extent(extent, crs=proj)
china = shpreader.Reader(r"D:\shp文件\陕西省_市\陕西省_市.dbf").geometries()
# 绘制中国国界省界九段线等等
# 创建底图,设置地图投影为World Plate Carrée,分辨率为高分辨率,地图范围为全球 20个
levels = [100,200, 500, 1000, 1500, 2000, 3000, 4000]
# levels=np.arange(-8000,8000,1000)
# 创建分级
color = ['#006837', '#addd8e', '#f7fcb9', '#c9bc87', '#a69165', '#856b49','#664830'] # 设置色带,19个颜色
cf = ax.contourf(lon, lat, dem, levels=levels, colors=color, extend='both')
ax.add_geometries(china, ccrs.PlateCarree(),
facecolor='none', edgecolor='black', zorder=1) # , linewidth=12) # , zorder=1)
# 设置图例,shrink调整色标长度
cb = plt.colorbar(cf, shrink=0.4, orientation='horizontal',
pad=0.05, aspect=50, ticks=levels, extend='both')
cb.set_ticks(levels) # 设置色带刻度
cb.ax.tick_params(labelsize=10)
cb.set_label('ShaanXi Elevation(meter)', fontsize=12) # 设置图例名称和字体大小
ax.set_xticks(np.arange(extent[0], extent[1]+1, 10), crs=proj)
ax.set_yticks(np.arange(extent[-2], extent[-1]+1, 10), crs=proj)
ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label=False))
ax.yaxis.set_major_formatter(LatitudeFormatter())
plt.savefig('D:\plot158.png', dpi=300,
bbox_inches='tight', pad_inches=0)
plt.show()
陕西地形图
于 2024-05-29 20:59:54 首次发布