利用Python绘制北京市区划
作者:石头人
邮箱:2205455617@qq.com
代码
数据:shp数据
------------------------------------------------------
代码:
# 导入库
import matplotlib.pyplot as plt
import numpy as np
from cartopy.io.shapereader import Reader
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import cartopy.crs as ccrs
# 导入shp文件
shp_path = "F:/shp/直辖市/北京市/北京市.shp"
shp_reader = Reader(shp_path)
# 创建图形
fig = plt.figure(figsize=(15,12))
proj = ccrs.PlateCarree()
ax1 = plt.subplot(1, 2, 1, projection=proj)
ax2 = plt.subplot(1, 2, 2, projection=proj)
# 设置边界范围
extent1 = [115.35, 117.6, 39.4, 41.1]
extent2 = [116, 116.7, 39.7, 40.2]
ax1.set_extent(extent1, crs = proj)
ax2.set_extent(extent2, crs = proj)
# 绘制图形
ax1.add_geometries(shp_reader.geometries(), fc="None", ec="k", lw=1.2, crs=proj, zorder=2)
ax2.add_geometries(shp_reader.geometries(), fc="None", ec="k", lw=1, crs=proj, zorder=2)
ax1.set_xticks(np.arange(116, 118, 1), crs=proj)
ax1.set_yticks(np.arange(39.5, extent1[3]+0.3, 0.5), crs=proj)
ax1.xaxis.set_major_formatter(LongitudeFormatter())
ax1.yaxis.set_major_formatter(LatitudeFormatter())
ax2.set_xticks(np.arange(116, 117, 0.5), crs=proj)
ax2.set_yticks(np.arange(40, 40.5, 0.5), crs=proj)
ax2.xaxis.set_major_formatter(LongitudeFormatter())
ax2.yaxis.set_major_formatter(LatitudeFormatter())
# 添加文字
plt.rcParams['font.family'] = 'Microsoft YaHei'
ax1.text(115.7, 39.7, r'房山区', fontsize=10)
ax1.text(116.27, 39.633, r'大兴区', fontsize=10)
ax1.text(116.62, 39.75, r'通州区', fontsize=10)
ax1.text(116.4, 40.4, r'怀柔区', fontsize=10)
ax1.text(115.9, 40.45, r'延庆县', fontsize=10)
ax1.text(116, 40.2, r'昌平区', fontsize=10)
ax1.text(116.9, 40.5, r'密云县', fontsize=10)
ax1.text(116.55, 40.14, r'顺义区', fontsize=10)
ax1.text(115.55, 39.98, r'门头沟区', fontsize=10)
ax1.text(117, 40.17, r'平谷区', fontsize=10)
ax2.text(116.12, 40.06, r'海淀区', fontsize=10)
ax2.text(116.4, 40, r'朝阳区', fontsize=10)
ax2.text(116.26, 39.82, r'丰台区', fontsize=10)
ax2.text(116.52, 39.93, r'东城区', fontsize=10)
ax2.text(116.23, 39.96, r'西城区', fontsize=10)
ax2.text(116.13, 39.84, r'石景山区', fontsize=10)
ax2.text(116.3, 39.73, r'大兴区', fontsize=10)
ax2.text(116.32, 40.1, r'昌平区', fontsize=10)
ax2.text(116.52, 40.14, r'顺义区', fontsize=10)
ax2.text(116.05, 39.73, r'房山区', fontsize=10)
arrow1 = ax2.arrow(116.27,39.95,116.31-116.22,39.92-39.95)
arrow2 = ax2.arrow(116.54,39.92,116.42-116.54,39.89-39.92)
arrow3 = ax2.arrow(116.175,39.85,116.175-116.175,39.91-39.85)
# 保存图片
plt.savefig('E:/Beijing.jpg', dpi=600, bbox_inches='tight')
声明:
欢迎各位亲转载、转发本号的原创作品,可以联系小编(微信号lizhi2412963740)授权。
第八星系人造大气理论爱好者致力于记录自己科研的脚印,致力于与大家一起交流学习进步!
欢迎加入第八星系人气爱交流群:
请备注 昵称-单位/院校-研究方向(为防止“无关”人员混入造成不好影响,群里会定期清理不改备注的成员)
后台私信:第八星系
群内每日更新分享数据
进群回复 第八星系
本文编辑|小拾壹