Python Geoplotlib 可视化地理数据的综合指南

Geoplotlib: Exploring the World with Python

Python Geoplotlib 可视化地理数据的综合指南

Geoplotlib是一个强大的Python库,用于可视化地理数据。它提供了一种简单直观的方法来创建地图并在其上绘制地理数据。

Geoplotlib 建立在 matplotlib 和 numpy 之上。它旨在使创建地图和在其上绘制数据变得容易。

Geoplotlib 提供了一个简单的界面,用于创建具有各种投影的地图,包括墨卡托、埃克特和哈默。

Geoplotlib支持多种数据格式,包括CSVGeoJSONShapefiles

它还为各种数据可视化提供内置支持,包括热图、choropleths 和动画。

主要特点 Geoplotlib提供了许多功能,使其成为可视化地理数据的强大工具。

易于使用:Geoplotlib 对于创建地图和在其上绘制数据非常简单。您无需成为 matplotlib 或 numpy 方面的专家即可使用 geoplotlib。

多重投影:Geoplotlib 支持各种地图投影,包括墨卡托、埃克特和哈默。这样可以轻松创建根据您的特定需求量身定制的地图。

内置数据可视化:Geoplotlib 为各种数据可视化提供内置支持,包括热图、choropleths 和动画。这样可以轻松浏览数据并深入了解其模式和趋势。

可扩展性:Geoplotlib 设计为可扩展,这意味着您可以对其进行自定义以满足您的特定需求。您可以创建自己的投影、数据可视化,甚至可以将其与其他库(如 D3.js)结合使用。

开源:Geoplotlib是一个开源库,这意味着您可以免费使用它并为它的发展做出贡献。

开始使用 Geoplotlib

让我们首先安装它及其依赖项。Geoplotlib 需要 scipy、numpy 和 matplotlib,因此请确保在安装 geoplotlib 之前已安装它们。

您可以使用 python 包安装程序 pip 安装 geoplotlib:

pip install geoplotlib

在 anaconda 环境中,您可以使用 conda 在 conda 提示符下安装命令:

conda install -c conda-forge geoplotlib

不同类型的可视化 点图(点图)

点图或点图用于在地图上绘制单个数据点。这对于可视化城市、地标或事件的位置等数据非常有用。

在此示例中,我们将绘制总线.csv文件中提供的位置。下面给出了数据示例:


+========================================+==================+==================+
|                  name                  |       lat        |       lon        |
+========================================+==================+==================+
| Rådhuspassagen                         | 55.7439334696163 | 12.4939206032287 |
+----------------------------------------+------------------+------------------+
| Fortvej (Rødovre)                      | 55.6952237184886 |   12.44859262751 |
+----------------------------------------+------------------+------------------+
| Amagerhallen                           | 55.6231253495358 | 12.6144437338954 |
+----------------------------------------+------------------+------------------+
| Københavns Lufthavn Kastrup (fjernbus) | 55.6292273994335 | 12.6458240910507 |
+----------------------------------------+------------------+------------------+
| Valby mod Kastrup (fjernbus)           | 55.6635187158974 | 12.5157589902864 |
+----------------------------------------+------------------+------------------+
| Roskilde Trekroner st (fjernbus)       | 55.6483457671695 | 12.1319156347238 |
+----------------------------------------+------------------+------------------+
| Holbæk mod kbh. (fjernbus)             | 55.7092499829538 | 11.6434932796666 |
+----------------------------------------+------------------+------------------+

代码 snippet

import geoplotlib
from geoplotlib.utils import read_csv

# load the data
data = read_csv('bus.csv')

# create a map
geoplotlib.dot(data)
geoplotlib.show()

使用地理图库的点图示例

alt

热图

热图用于在地图上显示数据点的密度。这对于可视化特定区域中事件或活动的集中度非常有用。

在此示例中,我们将绘制印度按地区划分的人口热图。

下面给出了数据示例:

+================+===============+=============+=============+====================+====================+
|     State      |   District    |     lat     |     lon     | Population in 2001 | Population in 2011 |
+================+===============+=============+=============+====================+====================+
| Andhra Pradesh | Anantapur     | 14.31206556 | 77.46015845 |            3640478 |            4081148 |
+----------------+---------------+-------------+-------------+--------------------+--------------------+
| Andhra Pradesh | Chittoor      | 13.33109263 | 78.92763899 |            3745875 |            4174064 |
+----------------+---------------+-------------+-------------+--------------------+--------------------+
| Andhra Pradesh | East Godavari | 16.78271832 | 82.24320747 |            4901420 |            5154296 |
+----------------+---------------+-------------+-------------+--------------------+--------------------+
| Andhra Pradesh | Guntur        | 15.88492577 | 80.58657614 |            4465144 |            4887813 |
+----------------+---------------+-------------+-------------+--------------------+--------------------+
| Andhra Pradesh | Krishna       | 16.14387275 | 81.14805061 |            4187841 |            4517398 |
+----------------+---------------+-------------+-------------+--------------------+--------------------+
| Andhra Pradesh | Kurnool       | 15.43759715 | 77.90086837 |            3529494 |            4053463 |
+----------------+---------------+-------------+-------------+--------------------+--------------------+
| Andhra Pradesh | Prakasam      |   15.489039 |  80.1166579 |            3059423 |            3397448 |
+----------------+---------------+-------------+-------------+--------------------+--------------------+
alt

使用地理图库的热图图示例

import geoplotlib
from geoplotlib.utils import read_csv, BoundingBox, DataAccessObject
import pandas as pd

# load the data
df = pd.read_csv('district wise population and centroids.csv')

# rename the columns
df.columns = ['State''District''lat''lon''Population in 2001''Population in 2011']

# Kernal Density Estimation
geoplotlib.kde(df, bw=6,cut_below=1e-5)

# create a map
geoplotlib.set_bbox(BoundingBox.KBH)
geoplotlib.show()

直方图(二维直方图)

在此示例中,我们将根据丹麦手机信号塔位置的数据生成直方图。下面给出了数据示例:

+====================+====================+
|        lon         |        lat         |
+====================+====================+
|   11.3536345358484 | 55.396806865594705 |
+--------------------+--------------------+
| 11.353636424000001 |       55.396854538 |
+--------------------+--------------------+
| 12.440447906745947 |  55.66927299820733 |
+--------------------+--------------------+
|   9.90203947203555 |    57.054188101033 |
+--------------------+--------------------+
| 12.287274532822275 | 55.942241224369134 |
+--------------------+--------------------+
| 12.264405121010098 |   55.9143449747863 |
+--------------------+--------------------+
|   8.64744152873755 |   56.3463091151789 |
+--------------------+--------------------+
alt
import geoplotlib
from geoplotlib.utils import read_csv, BoundingBox

# load the data
data = read_csv('opencellid_dk.csv')

# hitogram
geoplotlib.hist(data, colorscale='sqrt', binsize=8)

# create a map
geoplotlib.set_bbox(BoundingBox.DK)
geoplotlib.show()

空间图

空间图是一种特殊类型的图,其中节点具有明确定义的空间配置。

这些类型的图表对于显示运输网络譬如公交路线、火车轨道、飞行路径、供应链网络、电话网络和通勤网络等非常有用。

在此示例中,我们将生成机场位置的空间图,其中每个节点表示一个机场,每个边表示一个航班连接。

下面给出的数据示例:

+===============+===============+=============+=============+
| lon_departure | lat_departure | lon_arrival | lat_arrival |
+===============+===============+=============+=============+
|        61.838 |        55.509 |       38.51 |      55.681 |
+---------------+---------------+-------------+-------------+
|        61.838 |        55.509 |      49.464 |       56.01 |
+---------------+---------------+-------------+-------------+
|        61.838 |        55.509 |      83.084 |      55.021 |
+---------------+---------------+-------------+-------------+
|         38.51 |        55.681 |      61.838 |      55.509 |
+---------------+---------------+-------------+-------------+
|         38.51 |        55.681 |      20.987 |      55.483 |
+---------------+---------------+-------------+-------------+
|         38.51 |        55.681 |      49.464 |       56.01 |
+---------------+---------------+-------------+-------------+

输出效果:

alt

使用地理图库的空间图示例

import geoplotlib
from geoplotlib.utils import read_csv

# load the data
data = read_csv('flights.csv')

# create a map
geoplotlib.graph(data,
                 src_lat='lat_departure',
                 src_lon='lon_departure',
                 dest_lat='lat_arrival',
                 dest_lon='lon_arrival',
                 color='hot_r',
                 alpha=15,
                 linewidth=1)

geoplotlib.show()

分区统计

分区统计是彩色或阴影区域表示属性量级的地图。分区统计图用于在地图上显示特定变量的分布或密度。

这对于可视化人口或经济数据非常有用。

在这个例子中,我们将在美国生成失业的分区统计。

使用geoplotlib的分区统计图示例

import geoplotlib
from geoplotlib.utils import BoundingBox
from geoplotlib.colors import ColorMap
import json


# find the unemployment rate for the selected county, and convert it to color
def get_color(properties):
    key = str(int(properties['STATE'])) + properties['COUNTY']
    if key in unemployment:
        return cmap.to_color(unemployment.get(key), .15, 'lin')
    else:
        return [0, 0, 0, 0]


with open('unemployment.json') as fin:
    unemployment = json.load(fin)

cmap = ColorMap('Blues', alpha=255, levels=10)
geoplotlib.geojson('gz_2010_us_050_00_20m.json', fill=True, color=get_color, f_tooltip=lambda properties: properties['NAME'])
geoplotlib.geojson('gz_2010_us_050_00_20m.json', fill=False, color=[255, 255, 255, 64])
geoplotlib.set_bbox(BoundingBox.USA)
geoplotlib.show()

移动点(动画可视化)

geoplotlib最酷的功能是生成动画绘图的能力。在此示例中,让我们跟踪动画移动点图中的出租车移动。下面给出了数据示例:

+=========+=============+=============+============+
| taxi_id |     lon     |     lat     | timestamp  |
+=========+=============+=============+============+
|     366 | 116.4495033 | 39.80616333 | 1202374816 |
+---------+-------------+-------------+------------+
|     366 |   116.44952 |    39.80624 | 1202374846 |
+---------+-------------+-------------+------------+
|     366 | 116.4495233 | 39.80623333 | 1202374876 |
+---------+-------------+-------------+------------+
|     366 |   116.44952 |    39.80623 | 1202374906 |
+---------+-------------+-------------+------------+
|     366 | 116.4495267 | 39.80622167 | 1202374936 |
+---------+-------------+-------------+------------+
|     366 |   116.44952 |    39.80622 | 1202374966 |
+---------+-------------+-------------+------------+

使用 geoplotlib 绘制动画移动点图的示例

from geoplotlib.layers import BaseLayer
from geoplotlib.core import BatchPainter
import geoplotlib
from geoplotlib.colors import colorbrewer
from geoplotlib.utils import epoch_to_str, BoundingBox, read_csv


class TrailsLayer(BaseLayer):

    def __init__(self):
        self.data = read_csv('taxi.csv')
        self.cmap = colorbrewer(self.data['taxi_id'], alpha=220)
        self.t = self.data['timestamp'].min()
        self.painter = BatchPainter()


    def draw(self, proj, mouse_x, mouse_y, ui_manager):
        self.painter = BatchPainter()
        df = self.data.where((self.data['timestamp'] > self.t) & (self.data['timestamp'] <= self.t + 15*60))

        for taxi_id in set(df['taxi_id']):
            grp = df.where(df['taxi_id'] == taxi_id)
            self.painter.set_color(self.cmap[taxi_id])
            x, y = proj.lonlat_to_screen(grp['lon'], grp['lat'])
            self.painter.points(x, y, 10)

        self.t += 2*60

        if self.t > self.data['timestamp'].max():
            self.t = self.data['timestamp'].min()

        self.painter.batch_draw()
        ui_manager.info(epoch_to_str(self.t))


    def bbox(self):
        return BoundingBox(north=40.110222, west=115.924463, south=39.705711, east=116.803369)

geoplotlib.add_layer(TrailsLayer())
geoplotlib.show()

试试吧,这是我在Python中看到的最酷的效果之一!

数据来源:人口数据、其他文件。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/11592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUG分析以及BUG定位

一般来说bug大多数存在于3个模块&#xff1a; 1、前台界面&#xff0c;包括界面的显示&#xff0c;兼容性&#xff0c;数据提交的判断&#xff0c;页面的跳转等等&#xff0c;这些bug基本都是一眼可见的&#xff0c;不太需要定位&#xff0c;当然也不排除一些特殊情况&#xf…

【Koa】[NoSQL] Koa中相关介绍和使用Redis MongoDB增删改查

目录 NoSQL非关系型数据库关系型数据库&#xff08;RMDB&#xff09;介绍非关系型数据库&#xff08;NoSQL&#xff09;介绍Redis & MongoDB 在 Koa 中使用 Redis (了解)Redis 的安装和使用在 Koa 中连接 和 调用 Redis 在 Koa 中使用 MongoDBMongoDB 的安装MongoShell 操作…

C++模拟实现stack

1.前言 stack 遵循的原则是先进后出&#xff0c;那到底是用list 还是 vector呢&#xff1f;其实都可以&#xff0c;但是队列queue就不一样了&#xff0c;他甚至不可以支付vector&#xff0c;因为效率太低了。 但是库里面用了一种新的类型&#xff0c;deque&#xff0c;它的实现…

Qt - macOS 安装配置

文章目录 一、关于 QT1.2 Qt的发展史1.3支持的平台1.4 Qt版本1.5 Qt 的优点1.6 成功案例 二、软件安装1、保证已 Xcode 和 Command Line Tools2、下载 QT3、下载 [qtcreator](http://download.qt.io/official_releases/qtcreator/)查看qt版本 三、创建工程Qt 常见用法 四、基础…

消息服务概述

消息服务的作用&#xff1a; 在多数应用尤其是分布式系统中&#xff0c;消息服务是不可或缺的重要部分&#xff0c;它使用起来比较简单&#xff0c;同时解决了不少难题&#xff0c;例如异步处理、应用解耦、流量削锋、分布式事务管理等&#xff0c;使用消息服务可以实现一个高…

利用vscode--sftp,将本地项目/文件上传到远程服务器中详细教程

1、首先在 vscode 中下载 sftp&#xff1a; 2、然后在 vscode 中打开本地将要上传的项目或文件&#xff1a; 3、安装完后&#xff0c;使用快捷键 ctrlshiftP 打开指令窗口&#xff0c;输入 sftp:config &#xff0c;回车&#xff0c;在当前目录中会自动生成 .vscode 文件夹及 s…

通过Jmeter压测存储过程

一、存储过程准备&#xff1a; 1、建立一个空表&#xff1a; 1 CREATE TABLE test_data ( id NUMBER, name VARCHAR2(50), age NUMBER ); 2、建立一个存储过程&#xff1a; 1 2 3 4 5 6 7 8 9 CREATE OR REPLACE PROCEDURE insert_test_data (n IN NUMBER) AS BEGIN --E…

进阶 vue自定义指令 vue中常用自定义指令以及应用场景,案例书写

文章目录 vue3自定义指令1.什么是自定义指令&#xff1f;2.注册自定义指令2.1 全局注册2.2 局部注册<script setup>中注册&#xff1a;<script>中使用&#xff1a; 3.钩子函数参数详解4.指令传值5.总结 常用自定义指令案例v-longpress 长按v-debounce 防抖v-thrott…

python 将pdf文件转图片

有小伙伴问了怎么将 pdf文件转图片的问题&#xff0c;我百度了一波儿&#xff0c;搞了以下python代码给他封装成exe工具了。 中途打包踩了个坑&#xff0c;python进程池的问题&#xff0c;本地运行没啥问题&#xff0c;打包好的exe文件双击就会使电脑内存爆破卡死&#xff0c;…

Top命令

Top top - 12:46:01 up 2 days, 11:10, 3 users, load average: 0.56, 0.59, 0.45系统基本信息&#xff1a;显示了系统运行时间、登录用户数和平均负载&#xff08;load average&#xff09;情况。平均负载是系统在特定时间范围内的平均活跃进程数&#xff0c;可以用来衡量系…

iOS 应用上架的步骤和工具简介

APP开发助手是一款能够辅助iOS APP上架到App Store的工具&#xff0c;它解决了iOS APP上架流程繁琐且耗时的问题&#xff0c;帮助跨平台APP开发者顺利将应用上架到苹果应用商店。最重要的是&#xff0c;即使没有配置Mac苹果机&#xff0c;也可以使用该工具完成一系列操作&#…

spring-cloud-alibaba——nacos-server搭建

前言&#xff1a;组件版本关系&#xff0c;官方:组件版本关系 1,nacos-server搭建&#xff08;windows环境&#xff09;&#xff0c;下载地址nacos 选择对应的版本&#xff0c;这里以目前最新版2.2.3为例子,下载后解压 单机模式 修改\nacos-server-2.2.3\nacos\bin\startup.c…

RL vs 最优控制:用于轨迹跟踪的 LQR(使用 Python 代码)

一、说明 在本博客系列中&#xff0c;我们将了解最优控制的经典方法&#xff0c;这些方法在某种程度上为强化学习等更熟悉的主题奠定了坚实的基础。这两个领域之间存在着不可避免的共同边界&#xff0c;本系列旨在提出这些最优控制的形式化方法&#xff0c;作为强化学习方法的有…

从Vue 2到Vue 3:深入了解路由配置的变化与升级建议

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏:《 VUE 》 《 javaScript 》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 目录 &#x1f4d8; 前言 vue2路由配置 &#x1f4df; 一、控制台安装vue路由 &#x1f4df; 二、项目src文件夹下创建r…

基于SSM+JSP+LayUI的宿舍管理系统

修正初始账号密码 默认账号&#xff1a;admin&#xff0c;默认密码&#xff1a;123456修复后台管理头像消失功能相对简单些&#xff0c;可能需要添加一些功能&#xff0c;需要源码免费提供需要运行服务、添加功能等联系我

matlab BP神经网络对iris数据集进行分类

iris数据集 本文所用数据集&#x1f449;&#x1f449;&#x1f449;iris分类数据集 1.数据预处理 %% 1.数据预处理 oridatareadtable(Iris.xls,Sheet,Sheet1); Xtable2array(oridata(:,(1:4))); % X转化为array类型 Ytable2array(oridata(:,5)); % Y因为包含中文字符&…

STM32CUBUMX配置FLASH(W25Q128)--保姆级教程

———————————————————————————————————— ⏩ 大家好哇&#xff01;我是小光&#xff0c;嵌入式爱好者&#xff0c;一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子&#xff0c;使用STM32CUBEMX做了很多驱动&#x…

(css)AI智能问答页面布局

(css)AI智能问答页面布局 效果&#xff1a; html <!-- AI框 --><div class"chat-top"><div class"chat-main" ref"chatList"><div v-if"!chatList.length" class"no-message"><span>欢迎使…

OpenLayers入门,OpenLayers地图初始化时如何设置默认缩放级别、设置默认地图中心点、最大缩放级别和最小缩放级别以及默认坐标系

专栏目录: OpenLayers入门教程汇总目录 前言 OpenLayers地图初始化时如何设置默认缩放级别、初始化时设置默认地图中心点、设置最大缩放级别和最小缩放级别,超过缩放级别用户无法再放大和缩小,和设置默认坐标系。 二、依赖和使用 "ol": "^6.15.1"使用…

Python GDAL为具有多个波段的大量栅格图像绘制像素随时间变化走势图

本文介绍基于Python中的gdal模块&#xff0c;对大量长时间序列的栅格遥感影像文件&#xff0c;绘制其每一个波段中、若干随机指定的像元的时间序列曲线图的方法。 在之前的文章Python中GDAL批量绘制多时相栅格遥感影像的像元时间序列曲线图&#xff08;https://blog.csdn.net/z…