Basemap地图绘制_Python数据分析与可视化
Basemap地图绘制
- 安装和使用
- 地图投影
- 地图背景
- 在地图上画数据
Basemap
是Matplotlib
的一个子包,负责地图绘制。在数据可视化过程中,我们常需要将数据在地图上画出来。比如说我们在地图上画出城市人口,飞机航线,军事基地,矿藏分布等等。这样的地理绘图有助于读者理解空间相关的信息。适用于有空间位置的数据集。
安装和使用
相对于其他工具Basemap
用起来有点笨重,就算做点儿简单的可视化图也需要花费比预期更长的时间。
在处理比较复杂的地图可视化任务时,更现代的解决方案可能会更适用一些,比如leaflet
、Google Maps API
。然而,Basemap
符合Python
用户的使用习惯。
basemap
并没有集成到matplotlib
中,需要我们手动安装,basemap
安装起来很简单。
安装命令:
pip install basemap
安装完并导入basemap
工具箱后,只需要用几行代码就可以画出地理图:
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemapplt.figure(figsize=(8, 8))
m = Basemap(projection='ortho', resolution=None, lat_0=50, lon_0=-100)
m.bluemarble(scale=0.5)# 显式设置数据范围
plt.imshow(m.bluemarble(scale=0.5), origin='upper', vmin=0, vmax=1)plt.show()
下面使用了 mill 投影方式,设置了地图的经纬度范围,绘制了海岸线、国家边界以及经纬度网格,也可以根据需要调整投影方式和绘制的内容
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap# 创建一个地理图
m = Basemap(projection='mill', llcrnrlat=-60, urcrnrlat=90, llcrnrlon=-180, urcrnrlon=180, resolution='c')# 绘制海岸线和国家边界
m.drawcoastlines()
m.drawcountries()# 绘制经纬度网格
m.drawparallels(range(-90, 91, 30), labels=[1, 0, 0, 0])
m.drawmeridians(range(-180, 181, 60), labels=[0, 0, 0, 1])plt.title("World Map")
plt.show()
运用Basemap
函数我们可以在绘图区域中绘制地理信息相关的图像,当参数 projection
的值为'ortho'
时,我们将得到一个如上图所示的地球仪截面。
将参数projection
的值设置为lcc
时,我们可以通过经纬度设置来得到某一区域的局部地图:
fig = plt.figure(figsize=(8, 8))
m = Basemap(projection='lcc', resolution=None,width=8E6,height=8E6,lat_0=45,lon_0=-100)m.etopo(scale=0.5, alpha=0.5)
# 将经纬度映射为 (x, y) 坐标,用于绘制图像
x, y = m(-122.3, 47.6)
plt.plot(x, y, 'ok', markersize=5)
plt.text(x, y, ' Seattle', fontsize=12)
这里使用了两个额外参数,它们用来表示地图中心的纬度(lat_0
)和经度( lon_0
)。
地图投影
由于不可能把地表完美反映到二维平面上,所有的地图都是各种各样扭曲的产物,把这些扭曲的产物抹平到平面坐标系的过程,称为投影。
Basemap
提供了几十种不同的投影的实现。
投影简写-全称对照:
下面我们对一常用的投影进行简单的演示。定义一个可以画带经纬线地图的简便方法:
def draw_map(m, scale=0.2):# 画地貌晕渲图m.shadedrelief(scale=scale)# 用字典表示经纬度lats = m.drawparallels(np.linspace(-90, 90, 13))lons = m.drawmeridians(np.linspace(-180, 180, 13))# 字典的键是plt.Line2D示例lat_lines = chain(*(tup[1][0] for tup in lats.items()))lon_lines = chain(*(tup[1][0] for tup in lons.items()))all_lines = chain(lat_lines, lon_lines)# 用循环将所有线设置成需要的样式for line in all_lines:line.set(linestyle='-', alpha=0.3, color='w')
圆柱投影是最简单的地图投影类型,纬度线与经度线分别映射成水平线与竖直线。
采用这种投影类型的话,赤道区域的显示效果非常好,但是南北极附近的区域就会严重变形。
fig = plt.figure(figsize=(8, 6), edgecolor='w')
m = Basemap(projection='cyl', resolution=None,
llcrnrlat=-90, urcrnrlat=90,
llcrnrlon=-180, urcrnrlon=180, )
draw_map(m)
这里basemap
参数设置了左下角(llcrnr
)和右上角(urcrnr
)纬度(lat
)和经度(lon
)。不同的投影都有各种的优劣,大家之后可以多多尝试。
地图背景
basemap
程序包中有许多实用的函数,可以画出各种地形的轮廓,如陆地、海洋、湖泊、河流、各国的政治分界线。
常用画图函数:
如果要使用边界特征,就必须设置分辨率。通过resolution
来设置分辨率,取值为c
(原始分辨率)、l
(低分辨率)、i
(中分辨率)、h
(高分辨率)、f
(全画质分辨率)。
来看看两种不同分辨率的绘制效果:
fig, ax = plt.subplots(1, 2, figsize=(12, 8))
for i, res in enumerate(['l', 'h']):m = Basemap(projection='gnom', lat_0=57.3, lon_0=-6.2,width=90000, height=120000, resolution=res, ax=ax[i])m.fillcontinents(color="#FFDDCC", lake_color='#DDEEFF')m.drawmapboundary(fill_color="#DDEEFF")m.drawcoastlines()ax[i].set_title("resolution='{0}'".format(res));
plt.show()
可以看出低分辨率不适合这个缩放,低分辨率适合呈现全局视角,而且加载速度比高分辨率更快。要呈现某一视角的适合,最好先从一个能快速呈现的分辨率开始,然后不断提高分辨率直到满意为止。
在地图上画数据
basemap
还可以以地图为背景,在这上面画各种数据。basemap
实例中许多方法都是与地图有关的函数。这些函数与标准matplotlib
函数的用法类似,只是多了一个参数latlon
。如果设置为true
表示使用原来的经纬度坐标,不使用投影(x
,y
)坐标。
示例如下:
import pandas as pd
cities = pd.read_csv('california_cities.csv')
# 提取我们感兴趣的数据
lat = cities['latd'].values
lon = cities['longd'].values
population = cities['population_total'].values
area = cities['area_total_km2'].values
# 1. 绘制地图背景
fig = plt.figure(figsize=(8, 8))
m = Basemap(projection='lcc', resolution='h', lat_0=37.5, lon_0=-119,width=1E6, height=1.2E6)
m.shadedrelief()
m.drawcoastlines(color='gray')
m.drawcountries(color='gray')
m.drawstates(color='gray')
# 2. 绘制城市数据的散点图,其中颜色反映人口
# 尺寸反映面积
m.scatter(lon, lat, latlon=True,c=np.log10(population), s=area,cmap='Reds', alpha=0.5)
# 3. 创建颜色条和图例
plt.colorbar(label=r'$\log_{10}({\rm population})$')
plt.clim(3, 7)
# 使用虚拟的点生成图例
for a in [100, 300, 500]:plt.scatter([], [], c='k', alpha=0.5, s=a,label=str(a) + ' km$^2$')
plt.legend(scatterpoints=1, frameon=False,labelspacing=1, loc='lower left');
相关文章:

Basemap地图绘制_Python数据分析与可视化
Basemap地图绘制 安装和使用地图投影地图背景在地图上画数据 Basemap是Matplotlib的一个子包,负责地图绘制。在数据可视化过程中,我们常需要将数据在地图上画出来。 比如说我们在地图上画出城市人口,飞机航线,军事基地,…...

C#编程题分享(5)
判断质数问题 输⼊⼀个正整数,判断该数是否是质数。如果为质数输出 yes,如果不是输出no 样例输⼊113 输出yes int n Convert.ToInt32(Console.ReadLine()); int count 0; for (int i 1; i < n 1; i) {if (n % i 0) // 判断该数能被整除{coun…...

群晖Video Station 添加海报墙-新方法
海报墙 一般我们找到的都是mp4、mkv等格式的视频资源,而没有像上图这样的海报资源,那要怎样实现海报墙呢? 按照以前的方法,是可以通过The Movie Database的API Key来搜刮电影海报信息,但是现在这个方法不行了 现在介绍…...

【MODBUS】Modbus协议入门简介
Modbus(Modicon Communication Protocol)是一种用于工业自动化领域的通信协议,最初由Modicon(现在是施耐德电气的一部分)开发。Modbus协议被广泛应用于连接不同厂商的工业设备,实现设备之间的通信和数据交换…...

ORA-00257: archiver error. Connect internal only, until freed……
今天给客户测 试问题,让客户把数据发过来了。解压缩后一看,他们还是用的oracle 815版本的(他们exp导出时,带了导出日志,从导出日志中看出来是oracle 815版本的),不过没有关系,低版本的exp是可以用高版本的i…...

继承 和 多肽(超重点 ! ! !)
[本节目标] 1.继承 2.组合 3.多肽 1.继承 1.1 为什么要继承 Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是现实世界错综复杂,事物之间可能会存在一些关联࿰…...

H265、VP9、AV1视频编码器性能对比
1、背景介绍 目前在视频编解码器中,H264 已经成为绝对的主流,被大部分设备、浏览器所支持。虽然有更先进的编码器推出,但是受限于推广速度和设备支持成本,一直未能成为主流。 今年公司的目标是持续降本增效,现在将”屠刀“指向了视频业务的存储成本。视频文件存储主要两…...

C语言-结构体
---------------------------- ------------------ 岁月漫长心怀热爱,携手共赴星辰大海 --------今天来到我们自定义类型 -----结构体的讲解 目录 结构体的类型声明和初始化 结构体的类型声明 结构体成员的直接访问 结构体成员的间接访问 嵌套结构体进行访问 使用…...

C#拼夕夕自动化登录,电商网页自动化操作。WebView2
单纯靠WebView2是没办法通过JS实现自动登录操作的,包括浏览器插件,都不行,因为大公司对反爬机制控制的还是挺严格。 下面是实现效果,私信我,咨询解决方案。 20231202_153912 C#有偿Q群:927860652博客仅为…...

【Spring Boot 源码学习】BootstrapRegistryInitializer 详解
Spring Boot 源码学习系列 BootstrapRegistryInitializer 详解 引言往期内容主要内容1. 初识 BootstrapRegistryInitializer2. 加载 BootstrapRegistryInitializer3. BootstrapRegistryInitializer 的初始化 总结 引言 书接前文《初识 SpringApplication》,我们从 …...

预览功能实现
需求:将后端返回来的文字或者图片和视频展示在页面上。 <!-- 预览 --><el-dialog title"预览" :visible.sync"dialogPreviewVisible" width"50%" append-to-body :close-on-click-modal"false" close"Previe…...

canvas基础:绘制贝塞尔曲线
canvas实例应用100 专栏提供canvas的基础知识,高级动画,相关应用扩展等信息。 canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重要的帮助。 文章目录 bez…...

高项备考葵花宝典-项目范围管理输入、输出、工具和技术
项目范围管理包括确保项目“做”且“只做”所需的全部工作(即不能少做,也不能多做,如果多做,就要消耗团队额外的时间和资源,并且无法被认可),以成功完成项目。项目范围管理主要在于定义和控制哪…...

在表格中显示字典的内容(根据后端返回的数据)vue3
进入页面,调接口,后端返回数据,indexType为0或者1,要用这个数据显示字典的内容 用插槽拿到数据 写一个函数,在模板中使用 const { proxy } getCurrentInstance(); // 字典-指标类型 const { index_type } proxy.u…...

编程怎么学才能快速入门,分享一款中文编程工具快速学习编程思路,中文编程工具之边条主控菜单构件简介
编程怎么学才能快速入门,分享一款中文编程工具快速学习编程思路,中文编程工具之边条主控菜单构件简介 一、前言 零基础自学编程,中文编程工具下载,中文编程工具构件之扩展系统菜单构件教程编程系统化教程链接https://jywxz.blog…...

MySQL索引下推
文章目录 索引下推为什么范围查找Mysql没有用索引下推优化? 说到索引下推,应该会有不少人对它很陌生的,那么什么是索引下推,今天我们就来谈谈它到底是什么样? 索引下推 索引下推:MySQL 5.6 引入的索引下推…...

代码随想录刷题题Day3
刷题的第三天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C / Python Day3 任务 ● 链表理论基础 ● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表 1 链表理论基础 链表:通过…...

GO学习之 单例模式 sync.Once
GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…...

应用安全四十三:无密码认证安全
什么是无密码认证? 无密码认证是一种新兴的安全技术和身份认证手段,是用密码以外的东西验证软件用户身份的过程,旨在替代传统的用户账号和密码认证方法,提高账号的安全性和用户体验。无密码技术通过生物识别、多因素认证、基于硬…...

Lattice-Based Blind Signatures: Short, Efficient, and Round-Optimal
目录 摘要引言 Lattice-Based Blind Signatures: Short, Efficient, and Round-Optimal CCS 2023 摘要 我们提出了一种基于随机预言机启发式和标准格问题(环/模块SIS/LWE和NTRU)的2轮盲签名协议,签名大小为22KB。该协议是全面优化的…...

Qt/C++音视频开发57-切换音视频轨道/切换节目流/分别切换音频视频轨道
一、前言 对各种音视频文件格式的支持,是一个播放器的基础功能。一般的音视频文件只有1路流,比如音频文件只有1路音频流,视频文件只有1路音频1路视频流,实践过程中发现,还有一种ts格式的文件,可能有多路流…...

深度学习之基于Django文本情感分析识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习在文本情感分析领域的应用已经取得了显著的进展。Django是一个流行的Python Web框架,它可以帮助…...

138. 随机链表的复制 --力扣 --JAVA
题目 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点…...

Python Flask 框架开发
1. Python 代码示例(使用 Flask 框架) 1.1 安装依赖库 pip install flask flask_sqlalchemy flask_login flask_wtf 1.2 主应用文件 app.py from flask import Flask, request, jsonify, redirect, url_for, render_template, flash from flask_sqla…...

k8s安装-学习环境
目录 环境准备 配置hosts 关闭防火墙 关闭交换分区 调整swappiness参数 关闭setlinux Ipv4转发 时钟同步 安装Docker 配置Yum源 安装 配置 启动 日志 安装k8s 配置Yum源 Master节点 安装 初始化 配置kubectl 部署CNI网络插件 Node节点 检查 环境准备 准…...

Vue3动态表单
示例代码如下: // 引入需要的依赖包 import { ref, reactive } from vue; import { useForm } from /composables/useForm;// 定义表单数据模型 const formModel reactive({name: ,age: ,gender: , });// 使用自定义的useForm函数创建表单实例 const { register, …...

2312skia,15vulkan及技巧
ANGLE介绍 ANGLE,把OpenGLES2或3调用转换为DirectX9,11或OpenGL调用.这些说明记录了如何在Windows或Linux上使用ANGLE而不是本地OpenGL后端. 细节 gclient sync下载ANGLE的源码及Skia的其他仅测试依赖项. 要针对ANGLE构建Skia测试工具,请添加skia_use_angletrue到args.gn文件…...

TLSF算法概念,原理,内存碎片问题分析
TLSF算法介绍 TLSF(Two-Level Segregated Fit,两级分割适应算法)。 第一级(first level,简称fl):将内存大小按2的幂次方划分一个粗粒度的范围,如一个72字节的空闲内存的fl是6(72介…...

sharding-jdbc实现分库分表
shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 😅😅最近几天的状态有点不对,所以有几天没有更新了。 当我们的数据量比较大…...

JDK中lock锁的机制,其底层是一种无锁的架构实现的,公平锁和非公平锁
简述JDK中lock锁的机制,其底层是一种无锁的架构实现的,是否知道其是如何实现的 synchronized与lock lock是一个接口,而synchronized是在JVM层面实现的。synchronized释放锁有两种方式: 获取锁的线程执行完同步代码,…...