Python绘图:使用Basemap绘制全球地形图
目的
- 基于NOAA-NGDC的全球地形数据ETOPO2v2,绘制全球地形图。
思路
- 读取全球地形数据
- 绘制全球地形图
数据来源
- ETOPO2v2c_f4.nc下载地址:https://www.ngdc.noaa.gov/mgg/global/relief/ETOPO2/ETOPO2v2-2006/ETOPO2v2c/netCDF/ETOPO2v2c_f4_netCDF.zip
ETOPO2v2是美国国家海洋和大气管理局(NOAA)下属的国家地球物理数据中心(NGDC)开发的全球地形模型,包括全球陆地和海洋的地形,分辨率为2分。
步骤
- 读取全球地形数据
数据格式为netCDF(.nc),可以考虑使用xarray库来读取nc文件。
import xarray as xr # 导入xarray库
ds = xr.open_dataset('ETOPO2v2c_f4.nc') # 读取全球地形数据
ds # 显示nc文件信息
- 读取ETOPO2v2c_f4.nc文件信息可知,x表示经度,范围为-180~180度;y表示纬度,范围为-90~90度;z表示海拔。
- 绘制全球地形图
地形图的绘制使用Basemap包。Basemap是Python可视化库Matplotlib下的一个工具包,主要功能是绘制二维地图,是常用的地理数据可视化工具。尽管Basemap逐渐被Cartopy所取代,但个人认为某些地方Basemap使用起来比Cartopy更加方便好用。
- 导入绘图所需的库
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
- 准备绘图数据
# 准备用于绘图的数据
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)) # 纬度
lon, lat = np.meshgrid(lon, lat) # 构建经纬网
dem = ds['z'].data # DEM数据
- 绘图
# 设置地图全局属性plt.rcParams['font.sans-serif'] = ['Times New Roman'] # 设置整体的字体为Times New Romanplt.figure(figsize=(10, 6), dpi=600) # 设置大小和分辨率# 创建底图,设置地图投影为World Plate Carrée,分辨率为高分辨率,地图范围为全球m = Basemap(projection='cyl', resolution='h', llcrnrlon=-180, llcrnrlat=-90, urcrnrlon=180, urcrnrlat=90)# 设置地图经纬线,并只在左端和底端显示m.drawmeridians(np.arange(-180, 181, 30), labels=[0, 0, 0, 1], fontsize=10, linewidth=0.8, color='silver') # 经线m.drawparallels(np.arange(-90, 91, 30), labels=[1, 0, 0, 0], fontsize=10, linewidth=0.8, color='silver') # 纬线# 绘制地图levels = [-8000, -6000, -4000, -2000, -1000, -200, -50, 0, 50, 200, 500, 1000, 1500, 2000, 3000, 4000, 5000, 6000, 7000, 8000] # 创建分级color = ['#084594', '#2171b5', '#4292c6', '#6baed6', '#9ecae1', '#c6dbef', '#deebf7', '#006837', '#31a354', '#78c679', '#addd8e', '#d9f0a3', '#f7fcb9', '#c9bc87', '#a69165', '#856b49', '#664830', '#ad9591', '#d7ccca'] # 设置色带m.contourf(lon, lat, dem, levels=levels, extend='both', colors=color) # 绘图,并设置图例两端显示尖端# 设置图例cb = m.colorbar(location='bottom', pad=0.35) # 图例在底端显示cb.set_ticks(levels) # 设置色带刻度cb.ax.tick_params(labelsize=10) # 刻度字号大小cb.set_label('Global Elevation (meter)', fontsize=12) # 设置图例名称和字体大小# 保存图片并显示plt.savefig('global_elevation.jpg', dpi=600, bbox_inches='tight', pad_inches=0.1) # 输出地图,并设置边框空白紧密plt.show() # 显示地图
- 绘制结果
全部代码
# -*- encoding: utf-8 -*-
import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap# 主函数
if __name__ == '__main__':# 读取全球地形数据ds = xr.open_dataset('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)) # 纬度lon, lat = np.meshgrid(lon, lat) # 构建经纬网dem = ds['z'].data # DEM数据# 设置地图全局属性plt.rcParams['font.sans-serif'] = ['Times New Roman'] # 设置整体的字体为Times New Romanplt.figure(figsize=(10, 6), dpi=600) # 设置大小和分辨率# 创建底图,设置地图投影为World Plate Carrée,分辨率为高分辨率,地图范围为全球m = Basemap(projection='cyl', resolution='h', llcrnrlon=-180, llcrnrlat=-90, urcrnrlon=180, urcrnrlat=90)# 设置地图经纬线,并只在左端和底端显示m.drawmeridians(np.arange(-180, 181, 30), labels=[0, 0, 0, 1], fontsize=10, linewidth=0.8, color='silver') # 经线m.drawparallels(np.arange(-90, 91, 30), labels=[1, 0, 0, 0], fontsize=10, linewidth=0.8, color='silver') # 纬线# 绘制地图levels = [-8000, -6000, -4000, -2000, -1000, -200, -50, 0, 50, 200, 500, 1000, 1500, 2000, 3000, 4000, 5000, 6000, 7000, 8000] # 创建分级color = ['#084594', '#2171b5', '#4292c6', '#6baed6', '#9ecae1', '#c6dbef', '#deebf7', '#006837', '#31a354', '#78c679', '#addd8e', '#d9f0a3', '#f7fcb9', '#c9bc87', '#a69165', '#856b49', '#664830', '#ad9591', '#d7ccca'] # 设置色带m.contourf(lon, lat, dem, levels=levels, extend='both', colors=color) # 绘图,并设置图例两端显示尖端# 设置图例cb = m.colorbar(location='bottom', pad=0.35) # 图例在底端显示cb.set_ticks(levels) # 设置色带刻度cb.ax.tick_params(labelsize=10) # 刻度字号大小cb.set_label('Global Elevation (meter)', fontsize=12) # 设置图例名称和字体大小# 保存图片并显示plt.savefig('global_elevation.jpg', dpi=600, bbox_inches='tight', pad_inches=0.1) # 输出地图,并设置边框空白紧密plt.show() # 显示地图
最后
- 内容仅供大家学习参考,若有不足之处,敬请大家批评指正!
参考资料
- xarray官方文档:http://xarray.pydata.org/en/stable/index.html
- Basemap官方文档:https://basemaptutorial.readthedocs.io/en/latest/index.html
- Matplotlib官方文档https://matplotlib.org/3.2.0/index.html
- 色带设置:https://colorbrewer2.org/
Python绘图:使用Basemap绘制全球地形图相关推荐
- Python之使用Basemap绘制中国地图
目录 1.下载Basemap 2.安装Basemap 3.参数说明 4.地图包下载及导入 5.颜色填充 1.下载Basemap 本人电脑win7,64位操作系统,使用Jupyter 和 Python3 ...
- python绘图数字_绘制一个绘图,其中Yaxis文本数据(非数字)和Xaxis数字d
这给出了精确的期望图:import matplotlib.pyplot as plt from collections import OrderedDict T_OLD = {'10' : 'need ...
- python pyplot k线图_量化之路-python绘图-使用matplotlib绘制股票K线图(附代码)
最近不知道在瞎忙什么,学习速度有点慢,更新也比较少,需要反思一下. 在学习完python爬虫和获取股票数据技能后,接下来需要将数据输出称为图形,以便查看趋势,以及分析趋势. 重新梳理下需要学会的技能步 ...
- python绘图案例——递归绘制分形树
运行效果图 案例分析: 1.树干初始值为50 2.每次绘制完树枝后,画笔右转20度 3.绘制下一段树枝时,长度减少15,.重复2--3操作直到终止 4.终止条件:树干长度小于5,此时为顶端树枝 5.达 ...
- 【Python绘图】pyecharts绘制南丁格尔玫瑰图
from pyecharts.charts import Pie from pyecharts import options as opts import random# 随机颜色生成 def ran ...
- python | 绘制中国地形图(带中国边界省界)
写在前面 <全篇参考气象水文科研猫公众号7.30日发的推送> Python使用Cartopy绘制全球地形图 效果图 1 不含中国边界和省界的全球地形图 直接参考公众号的推送就没问题 2 含 ...
- 第4章【思考与练习2】数据文件high-speed rail.csv存放着世界各国高速铁路的情况。对世界各国高铁的数据进行绘图分析。使用Basemap绘制地图及使用Pyecharts绘制地图。
目录 P84思考与练习2 方法一:使用Basemap绘制地图 方法二:使用Pyecharts绘制地图 P84思考与练习2 1.叙述各类图形的特点.适合展示的数据特性,以及在数据探索阶段的用途. 函数绘 ...
- 【Python实用工具】速来!!一篇文章十分钟教你如何使用Python第三方库basemap进行地图绘制
basemap地图绘制 basemap地图绘制 1 basemap的使用 1.1 basemap安装 1.2 basemap使用 1.3 缩放区域与绘图 2 basemap综合示例 2.1 美国人口分 ...
- python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等)
python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等) 1. 效果图 2. 原理 2.1 依赖模块及安装 2.2 工程目录 2.3 依赖文件latlng.txt 经纬度 3 源码 ...
最新文章
- Android测试原理概述(一)
- BCH欢迎ETH使用BCH作为数据层
- mysql扩展中如何处理结果集_我们如何处理MySQL存储过程中的结果集?
- 安装Xcode在Mac OS X10.7.3上
- 计算机考试用远程桌面,职称计算机考试:教你体验XP远程桌面多用户登录
- 第五章 数组和指针的关系
- 八皇后问题求解动态图形演示
- Git安装及配置5分钟快速教程
- 大数据基础技术和应用
- Java并发编程实战之基于生产者消费者模式的日志服务读书笔记
- lfm雷达信号处理matlab,雷达信号处理-线性调频(LFM)Chirp信号脉冲压缩
- Android adb shell启动应用程序的方法
- 二叉平衡树的旋转操作
- java计算机毕业设计晨光文具店进销存系统设计与开发源码+数据库+系统+lw文档+部署
- 和一群程序猿的旧金山优胜美地之旅
- ImageNet中1000类目标的编号所对应的具体类别
- DC/OS的基本思想——为什么说他是数据中心操作系统
- Tableau学习(一)
- OpenCV系列四 --- 颜色通道分离与多通道图像混合
- oracle 数据类型是什么,oracle的数据类型有哪些?
热门文章
- IEEE期刊论文格式(一)
- IDEA build时提示错误信息: java: System Java Compiler was not found in classpath
- Soul(灵魂)匹配脚本、autojs、按键精灵~
- upc 个人训练赛第三场:排课表(容斥原理+组合数学)
- Java中的短路与运算和短路或运算
- 虚幻4脱坑指南——官网C++编程教程中第一人称设计游戏教程的若干问题及解决方法
- Enter实现Tab键的功能
- laradock一些坑(长期维护)
- matlab print 保留颜色,科学网—解决matlab saveas printf保存图片时 colorbar中的字体颜色发生改变 - 肖鑫的博文...
- 所有weblogic版本下载