目的

  • 基于NOAA-NGDC的全球地形数据ETOPO2v2,绘制全球地形图。

思路

  1. 读取全球地形数据
  2. 绘制全球地形图

数据来源

  • ETOPO2v2c_f4.nc下载地址:https://www.ngdc.noaa.gov/mgg/global/relief/ETOPO2/ETOPO2v2-2006/ETOPO2v2c/netCDF/ETOPO2v2c_f4_netCDF.zip

ETOPO2v2是美国国家海洋和大气管理局(NOAA)下属的国家地球物理数据中心(NGDC)开发的全球地形模型,包括全球陆地和海洋的地形,分辨率为2分。

步骤

  1. 读取全球地形数据

数据格式为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表示海拔。
  1. 绘制全球地形图

地形图的绘制使用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()  # 显示地图

最后

  • 内容仅供大家学习参考,若有不足之处,敬请大家批评指正!

参考资料

  1. xarray官方文档:http://xarray.pydata.org/en/stable/index.html
  2. Basemap官方文档:https://basemaptutorial.readthedocs.io/en/latest/index.html
  3. Matplotlib官方文档https://matplotlib.org/3.2.0/index.html
  4. 色带设置:https://colorbrewer2.org/

Python绘图:使用Basemap绘制全球地形图相关推荐

  1. Python之使用Basemap绘制中国地图

    目录 1.下载Basemap 2.安装Basemap 3.参数说明 4.地图包下载及导入 5.颜色填充 1.下载Basemap 本人电脑win7,64位操作系统,使用Jupyter 和 Python3 ...

  2. python绘图数字_绘制一个绘图,其中Yaxis文本数据(非数字)和Xaxis数字d

    这给出了精确的期望图:import matplotlib.pyplot as plt from collections import OrderedDict T_OLD = {'10' : 'need ...

  3. python pyplot k线图_量化之路-python绘图-使用matplotlib绘制股票K线图(附代码)

    最近不知道在瞎忙什么,学习速度有点慢,更新也比较少,需要反思一下. 在学习完python爬虫和获取股票数据技能后,接下来需要将数据输出称为图形,以便查看趋势,以及分析趋势. 重新梳理下需要学会的技能步 ...

  4. python绘图案例——递归绘制分形树

    运行效果图 案例分析: 1.树干初始值为50 2.每次绘制完树枝后,画笔右转20度 3.绘制下一段树枝时,长度减少15,.重复2--3操作直到终止 4.终止条件:树干长度小于5,此时为顶端树枝 5.达 ...

  5. 【Python绘图】pyecharts绘制南丁格尔玫瑰图

    from pyecharts.charts import Pie from pyecharts import options as opts import random# 随机颜色生成 def ran ...

  6. python | 绘制中国地形图(带中国边界省界)

    写在前面 <全篇参考气象水文科研猫公众号7.30日发的推送> Python使用Cartopy绘制全球地形图 效果图 1 不含中国边界和省界的全球地形图 直接参考公众号的推送就没问题 2 含 ...

  7. 第4章【思考与练习2】数据文件high-speed rail.csv存放着世界各国高速铁路的情况。对世界各国高铁的数据进行绘图分析。使用Basemap绘制地图及使用Pyecharts绘制地图。

    目录 P84思考与练习2 方法一:使用Basemap绘制地图 方法二:使用Pyecharts绘制地图 P84思考与练习2 1.叙述各类图形的特点.适合展示的数据特性,以及在数据探索阶段的用途. 函数绘 ...

  8. 【Python实用工具】速来!!一篇文章十分钟教你如何使用Python第三方库basemap进行地图绘制

    basemap地图绘制 basemap地图绘制 1 basemap的使用 1.1 basemap安装 1.2 basemap使用 1.3 缩放区域与绘图 2 basemap综合示例 2.1 美国人口分 ...

  9. python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等)

    python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等) 1. 效果图 2. 原理 2.1 依赖模块及安装 2.2 工程目录 2.3 依赖文件latlng.txt 经纬度 3 源码 ...

最新文章

  1. Android测试原理概述(一)
  2. BCH欢迎ETH使用BCH作为数据层
  3. mysql扩展中如何处理结果集_我们如何处理MySQL存储过程中的结果集?
  4. 安装Xcode在Mac OS X10.7.3上
  5. 计算机考试用远程桌面,职称计算机考试:教你体验XP远程桌面多用户登录
  6. 第五章 数组和指针的关系
  7. 八皇后问题求解动态图形演示
  8. Git安装及配置5分钟快速教程
  9. 大数据基础技术和应用
  10. Java并发编程实战之基于生产者消费者模式的日志服务读书笔记
  11. lfm雷达信号处理matlab,雷达信号处理-线性调频(LFM)Chirp信号脉冲压缩
  12. Android adb shell启动应用程序的方法
  13. 二叉平衡树的旋转操作
  14. java计算机毕业设计晨光文具店进销存系统设计与开发源码+数据库+系统+lw文档+部署
  15. 和一群程序猿的旧金山优胜美地之旅
  16. ImageNet中1000类目标的编号所对应的具体类别
  17. DC/OS的基本思想——为什么说他是数据中心操作系统
  18. Tableau学习(一)
  19. OpenCV系列四 --- 颜色通道分离与多通道图像混合
  20. oracle 数据类型是什么,oracle的数据类型有哪些?

热门文章

  1. IEEE期刊论文格式(一)
  2. IDEA build时提示错误信息: java: System Java Compiler was not found in classpath
  3. Soul(灵魂)匹配脚本、autojs、按键精灵~
  4. upc 个人训练赛第三场:排课表(容斥原理+组合数学)
  5. Java中的短路与运算和短路或运算
  6. 虚幻4脱坑指南——官网C++编程教程中第一人称设计游戏教程的若干问题及解决方法
  7. Enter实现Tab键的功能
  8. laradock一些坑(长期维护)
  9. matlab print 保留颜色,科学网—解决matlab saveas printf保存图片时 colorbar中的字体颜色发生改变 - 肖鑫的博文...
  10. 所有weblogic版本下载