千家信息网

python怎么绘制中国地图

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要讲解了"python怎么绘制中国地图",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python怎么绘制中国地图"吧!前言气象、海洋、地球科
千家信息网最后更新 2025年12月02日python怎么绘制中国地图

这篇文章主要讲解了"python怎么绘制中国地图",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python怎么绘制中国地图"吧!

前言

气象、海洋、地球科学相关的分析必然少不了地图的可视化。
Python中我常用的绘制地图和空间信息分析的库是Cartopy。
Cartopy有一个非常严重的问题,那就是自带的中国国界数据有问题,这也是很多国外开源库的普遍问题。
在做中国区域的分析时,由于九段线的位置很偏南,因此最标准的做法是同时绘制南海区域的子图。
在做一些站点展示的时候,如果只单独画上几个站点总觉得很丑,可以加上一些地形背景。

综上,今天想要用一个小例子解决这3个问题:

  1. 正确的中国国界线及九段线绘制
  2. 南海小地图绘制
  3. 全球地形图添加

准备工作

  1. 获取正确的中国矢量文件:公众号后台留言"中国行政区划"
    (这个矢量文件来自资源环境平台,并和权威机构的标准地图做了比对,吻合一致。)
  2. 获取全球地形图像:公众号后台留言"全球地形"
    (提供的是全球50m分辨率的tif图,如果对分辨率要求不高可以直接使用stock_img())

代码

# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import cartopy
import cartopy.crs as ccrs
import cartopy.feature as cfeat
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from cartopy.io.shapereader import Reader, natural_earth
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
from matplotlib.image import imread


def create_map():
shp_path = './cn_shp/Province_9/'
# --创建画图空间
proj = ccrs.PlateCarree() # 创建坐标系
fig = plt.figure(figsize=(6, 8), dpi=400) # 创建页面
ax = fig.subplots(1, 1, subplot_kw={'projection': proj})

# --设置地图属性
provinces = cfeat.ShapelyFeature(
Reader(shp_path + 'Province_9.shp').geometries(),
proj, edgecolor='k',
facecolor='none'
)
# 加载省界线
ax.add_feature(provinces, linewidth=0.6, zorder=2)
# 加载分辨率为50的海岸线
ax.add_feature(cfeat.COASTLINE.with_scale('50m'), linewidth=0.6, zorder=10)
# 加载分辨率为50的河流~
ax.add_feature(cfeat.RIVERS.with_scale('50m'), zorder=10)
# 加载分辨率为50的湖泊
ax.add_feature(cfeat.LAKES.with_scale('50m'), zorder=10)
ax.set_extent([105, 133, 15, 45])
# ax.stock_img()
ax.imshow(
imread('./NE1_50M_SR_W.tif'),
origin='upper',
transform=proj,
extent=[-180, 180, -90, 90]
)
# --设置网格点属性
gl = ax.gridlines(
crs=ccrs.PlateCarree(),
draw_labels=True,
linewidth=1.2,
color='k',
alpha=0.5,
linestyle='--'
)
gl.xlabels_top = False # 关闭顶端的经纬度标签
gl.ylabels_right = False # 关闭右侧的经纬度标签
gl.xformatter = LONGITUDE_FORMATTER # x轴设为经度的格式
gl.yformatter = LATITUDE_FORMATTER # y轴设为纬度的格式
gl.xlocator = mticker.FixedLocator(np.arange(95, 145 + 5, 5))
gl.ylocator = mticker.FixedLocator(np.arange(-5, 45 + 5, 5))

# --设置小地图
left, bottom, width, height = 0.67, 0.15, 0.23, 0.27
ax2 = fig.add_axes(
[left, bottom, width, height],
projection=proj
)
ax2.add_feature(provinces, linewidth=0.6, zorder=2)
ax2.add_feature(cfeat.COASTLINE.with_scale('50m'), linewidth=0.6, zorder=10)
ax2.add_feature(cfeat.RIVERS.with_scale('50m'), zorder=10)
ax2.add_feature(cfeat.LAKES.with_scale('50m'), zorder=10)
ax2.set_extent([105, 125, 0, 25])
# ax2.stock_img()
ax2.imshow(
imread('./NE1_50M_SR_W.tif'),
origin='upper',
transform=proj,
extent=[-180, 180, -90, 90]
)
return ax

def main():
ax = create_map()
title = f'distribution of station around China'
ax.set_title(title, fontsize=18)

df = pd.read_csv('buyo_position.csv')
df['lon'] = df['lon'].astype(np.float64)
df['lat'] = df['lat'].astype(np.float64)
ax.scatter(
df['lon'].values,
df['lat'].values,
marker='o',
s=10 ,
color ="blue"
)
for i, j, k in list(zip(df['lon'].values, df['lat'].values, df['name'].values)):
ax.text(i - 0.8, j + 0.2, k, fontsize=6)
plt.savefig('station_distribute_map.png')

if __name__ == '__main__':
main()

感谢各位的阅读,以上就是"python怎么绘制中国地图"的内容了,经过本文的学习后,相信大家对python怎么绘制中国地图这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

地图 中国 分辨率 问题 中国地图 全球 地形 分析 学习 九段 公众 内容 区域 后台 国界 就是 属性 文件 标准 标签 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 mysql不同数据库关系 教科版《网络技术应用》教案 网络技术 有哪些应用 数据库 阿姆斯特朗定理 上海巡检软件开发解决方案 河北廊坊服务器地址 来宾计算机网络技术培训 如何管理svn服务器 温岭巨型软件开发维修价格 济南安卓软件开发公司哪家比较好 网络安全卡牌游戏 北京网际天地网络技术有限公司 成都网络安全技术论坛 数据库管理系统的目的是什么 网络技术基础pk 服务器系统怎么关闭组合键 软件开发实用的试题 明日之后各个服务器如何刷金条 高校 软件开发能力 电脑怎么刷新数据库 迷你世界炸mc的服务器有多少 暑期网络安全小报 app 软件开发外包项目 服务器端口攻击 数据库怎么看文件类型 固原多媒体软件开发 手机数据库怎么转换成电子版 吉林新一代网络技术分类设计 高中网络技术应用优秀教案 小型服务器和交换机辐射安全距离
0