python怎么绘制中国地图
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"python怎么绘制中国地图",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python怎么绘制中国地图"吧!前言气象、海洋、地球科
千家信息网最后更新 2026年11月03日python怎么绘制中国地图
这篇文章主要讲解了"python怎么绘制中国地图",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python怎么绘制中国地图"吧!
前言
气象、海洋、地球科学相关的分析必然少不了地图的可视化。
Python中我常用的绘制地图和空间信息分析的库是Cartopy。
Cartopy有一个非常严重的问题,那就是自带的中国国界数据有问题,这也是很多国外开源库的普遍问题。
在做中国区域的分析时,由于九段线的位置很偏南,因此最标准的做法是同时绘制南海区域的子图。
在做一些站点展示的时候,如果只单独画上几个站点总觉得很丑,可以加上一些地形背景。
综上,今天想要用一个小例子解决这3个问题:
正确的中国国界线及九段线绘制 南海小地图绘制 全球地形图添加
准备工作
获取正确的中国矢量文件:公众号后台留言"中国行政区划"
(这个矢量文件来自资源环境平台,并和权威机构的标准地图做了比对,吻合一致。)获取全球地形图像:公众号后台留言"全球地形"
(提供的是全球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安全错误
数据库的锁怎样保障安全
手磨咖啡
互联网 卓越科技
沃里互联网科技
掌上梦互联网科技
互联网金融 科技创新
大白互联网科技
中正互联网科技招聘
昭通云南众福互联网科技有限公司
常德市电业局互联网科技部
福建科技产业互联网发展
内蒙古九一互联网科技
高科技互联网发展前景如何
互联网数据科技专业
南博望互联网科技有限公司
下一代互联网重大应用科技园
宁波跨境商互联网科技有限公司
福建互联网展示科技馆设计
全球科技与互联网公司市值变化
世界互联网科技成果奖
北京天晋互联网科技有限公司
手磨咖啡
南京欣网互联网络科技有限公司
科技创新互联网企业
润盈互联网科技
伴你行互联网科技有限公司
互联网科技创新企业排名
恒银科技与互联网金融
世界互联网领先科技成果获奖
安徽零酒互联网科技有限公司
科技互联网企业在行动