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

news2024/9/20 18:35:21

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.coloradmin.cn/o/802679.html

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

相关文章

有哪些常用的设计素材资源网站?

设计师要想在瞬息万变的设计世界中紧跟潮流&#xff0c;就需要不断探索和访问流行的UI设计网站&#xff0c;看看什么是时尚。UI设计网站也是寻求可能解决方案、脚本和设计反馈的好地方。Behance对很多设计师来说并不陌生&#xff0c;是Adobe的UI设计网站。然而&#xff0c;2022…

蓝桥杯单片机第九届国赛 真题+代码

iic.c /* # I2C代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础&#xff0c;根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求&#xff0c;进行代码调试和修改。 */ #include <STC1…

【Vue3】局部组件和全局组件

1. 局部组件 Card.vue <template><div class"card"><header><div>标题</div><div>副标题</div></header><section>内容</section></div> </template><script setup lang"ts"…

Jenkins集成SonarQube保姆级教程

Jenkins是自动化部署平台&#xff0c;一个粗眉大眼的糙汉子&#xff01; SonarQube是代码扫描平台&#xff0c;一个眉目清秀的小女子&#xff01; 有一天&#xff0c;上天交给我一个任务&#xff0c;去撮合撮合他们&#xff01; 我抬头看了看天&#xff0c; 不&#xff0c;…

第五章 传输层

第五章 传输层 5.1 运输层的功能 运输层功能&#xff1a; 运输层为应用进程之间提供 端到端的逻辑通信&#xff08;但网络层是为主机之间提供逻辑通信&#xff09;。 运输层还要对收到的报文进行差错检测。 运输层提供面向连接和无连接的服务 ​ 从通信和信息处理的角度看…

Jsp+Ssh+Mysql实现的简单的企业物资信息管理系统项目源码附带视频指导运行教程

由jspssh&#xff08;springstruts2mysql&#xff09;实现的企业物资信息管理系统&#xff0c;系统功能比较简单&#xff0c;实现了基本的管理员、操作员等用户管理、物品分类管理、物品管理、入库管理、出库管理、库存预警、客户管理、供应商管理等基本功能需要的可以联系我分…

Linux工具【1】(编辑器vim、编译器gcc与g++)

vim详解 引言vimVim的三种模式及模式切换普通模式下操作底行模式下操作 gcc与ggcc的使用&#xff08;g类似&#xff09;预编译编译汇编链接静态库与动态库 总结 引言 vim&#xff08;vi improved&#xff09;编辑器是从 vi 发展出来的一个文本编辑器。 代码补全、编译及错误跳…

C# 定时器封装版

一、概述 在 Winform 等平台开发中&#xff0c;经常会用到定时器的功能&#xff0c;但项目定时器一旦写多了&#xff0c;容易使软件变卡&#xff0c;而且运行时间长了会造成软件的闪退&#xff0c;这个可能是内存溢出造成的&#xff0c;具体原因我也没去深究&#xff0c;另一个…

2023年五大团队任务管理跟踪软件排行榜揭晓

企业对高效生产力的需求让团队任务管理跟踪软件在现代商业环境中变得越来越重要&#xff0c;然而市场上存在众多的任务管理工具&#xff0c;选择合适的工具对于提高工作效率和实现组织目标至关重要。本文章将提供一个客观的团队任务管理跟踪软件排行榜&#xff0c;帮助读者根据…

springboot创建并配置环境(二) - 配置基础环境

文章目录 一、介绍二、配置系统属性和环境变量三、配置自定义属性命令行参数四、作为应用配置信息 一、介绍 在上一篇文章&#xff1a;springboot创建并配置环境(一) - 创建环境中我们探讨了springboot是如何根据当前应用程序类型去创建对应的环境实例的。接下来探讨如何去配置…

java上传和解压任意压缩包

java上传zip文件并解压读取_java上传压缩包解压_梓隽的博客-CSDN博客 添加依赖 <dependency><groupId>com.github.junrar</groupId><artifactId>junrar</artifactId><version>7.4.1</version></dependency><dependency&g…

无涯教程-jQuery - hide( speed, callback)方法函数

hide(speed&#xff0c;[callback])方法使用优美的动画隐藏所有匹配的元素&#xff0c;并在完成后触发可选的回调。 hide( speed, [callback] ) - 语法 selector.hide( speed, [callback] ); 这是此方法使用的所有参数的描述- speed - 代表三个预定义速度("slow…

四. 点云着色(真彩点云)方案

前面内容&#xff1a; 一. 器件选型心得&#xff08;系统设计&#xff09;--1_goldqiu的博客-CSDN博客 一. 器件选型心得&#xff08;系统设计&#xff09;--2_goldqiu的博客-CSDN博客 二. 多传感器时间同步方案&#xff08;时序闭环&#xff09;--1 三. 多传感器标定方案&…

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】

4.权限管理模块开发 4.1 权限管理概述 4.1.1 权限管理的意义 后台管理系统中&#xff0c;通常需要控制不同的登录用户可以操作的内容。权限管理用于管理系统资源&#xff0c;分配用户菜单、资源权限&#xff0c;以及验证用户是否有访问资源权限。 4.1.2 RBAC权限设计模型 …

【微信小程序创作之路】- 小程序事件绑定、动态提示Toast、对话框 Modal

【微信小程序创作之路】- 小程序事件绑定、动态提示Toast、对话框 Modal 第六章 小程序事件绑定、动态提示Toast、对话框 Modal 文章目录 【微信小程序创作之路】- 小程序事件绑定、动态提示Toast、对话框 Modal前言一、事件是什么&#xff1f;二、小程序中常用事件三、事件传…

iOS--多线程原理

进程、线程与队列 进程的定义 进程是指在系统中正在运行的一个应用程序&#xff0c;如微信、支付宝app都是一个进程每个进程之间是独立的&#xff0c;每个进程均运行在齐专用的且受保护的内存 线程的定义 线程是进程的基本执行单元&#xff0c;一个进程的所有任务都在线程中…

【牛客网】链表的回文结构

思路1&#xff1a;找到中间节点&#xff0c;从中间节点向后反转链表 寻找链表的中间节点和反转链表的程序已经讲解过 寻找链表的中间节点&#xff1a;CSDN 反转链表&#xff1a;CSDN 然后从头节点和中间节点依次向后比较节点的值 &#x1f4d6;Note: 后半段链表反转后&#xff…

每天100w次登陆请求, 8G 内存该如何设置JVM参数?

一、新系统上线如何规划容量&#xff1f; 1.套路总结 任何新的业务系统在上线以前都需要去估算服务器配置和JVM的内存参数&#xff0c;这个容量与资源规划并不仅仅是系统架构师的随意估算的&#xff0c;需要根据系统所在业务场景去估算&#xff0c;推断出来一个系统运行模型&…

事后多重比较方法

一、案例介绍 由单因素方差分析案例中&#xff0c;为研究郁金对低张性缺氧小鼠存活时间的影响&#xff0c;将36只小鼠随机生成A、B以及 C 三组&#xff0c;每组12个&#xff0c;雌雄各半&#xff0c;分别以10g/kg、20g/kg、40g/kg三种不同剂量的郁金灌胃&#xff0c;各组小鼠均…

vue elementui table去掉滚动条与实现表格自动滚动且无滚动条

当table内容列过多时&#xff0c;可通过height属性设置table高度以固定table高度、固定表头&#xff0c;使table内容可以滚动。 现在需求是右侧滚动条不好看&#xff0c;需要去除滚动条&#xff0c;并隐藏滚动条所占列的位置。让他可以滚动但是不出现滚动条,不然即时隐藏了滚动…