使用GeoPandas进行地理空间数据可视化

news2024/11/26 0:33:59

大家好,在当今数据驱动的世界中,将信息可视化到地图上可以提供有价值的见解,帮助有效地传达复杂的模式。GeoPandas是一个建立在pandasshapely之上的Python库,使用户能够通过将地理空间数据与各种变量合并来创建令人惊叹的地图。在本文中,我们将使用在印度卡纳塔克邦绘制变量地图的示例来探索GeoPandas的功能。最终,你将具备使用丰富数据叠加创建自己令人印象深刻的地图的知识。

GeoPandas是GeoPandas是一个强大的库,通过添加地理空间数据类型和操作扩展了pandas的功能。它允许我们处理空间数据,如shapefiles,并执行合并、连接和绘图等空间操作。

1.设置环境

在开始之前,请确保你已经在Python环境中安装了GeoPandas及其依赖项。你可以使用pipconda安装GeoPandas,包括pandasmatplotlib在内的依赖项将会自动安装。

pip install geopandas

2.获取Shapefile

在演示中,使用从KGIS网站获取的卡纳塔克邦州的shapefile,其包含空间要素的几何和属性数据。

3.加载和探索Shapefile 

使用GeoPandas,我们可以将卡纳塔克邦的shapefile加载到一个GeoDataFrame中,这实际上是一个带有几何列的pandas DataFrame。几何列存储了shapefile中每个要素的空间信息。

# 导入GeoPandas库
import geopandas as gpd

# 加载shapefile
gdf_districts = gpd.read_file('District.shp')

 数据帧

4.绘制地图

使用GeoPandas,创建基本地图就像在GeoDataFrame上调用plot()函数一样简单。这将生成卡纳塔克邦边界的可视化表示。

# 绘制地图
gdf_districts.plot()

 5.将数据与地图合并

要将数据变量添加到我们的地图中,我们需要将GeoDataFrame与包含我们要可视化的变量的另一个DataFrame合并。这个合并过程通常使用一个共同的标识符,比如独特的地理代码或名称来完成。

# 数据将在地图中被可视化
import pandas as pd
df = pd.read_excel("dist_population.xlsx")

 人口数据

我们可以看到我们需要两个数据帧gdf_districtsdf,其中有一个共同的列,即区名,但在两个数据帧中,区名的命名方式不同,因此我们将在merge()函数中传递left_on='KGISDist_1'right_on='District Name'参数并执行left join

# 将shapefile与districts相关的varibale进行合并
# KGISDist_1是我们在gdf_districts数据框架中的地区名称
# District是我们在df数据框架中的地区名称
gdf_merged = gdf_districts.merge(df, left_on='KGISDist_1', right_on='District Name', how='left')

合并后,我们可以看到两个新列出现在末尾District NamePopulation

 合并后的数据帧

6.在地图上绘制变量数据

一旦数据合并,就可以利用GeoPandas的功能在地图上绘制变量。通过选择适当的颜色调色板、图例和标签,可以增强视觉表现效果,将地图变得更加易于阅读和理解,有效地传达有意义的信息。

import matplotlib.pyplot as plt
from matplotlib import colors
import numpy as np

# 定义颜色比例尺
cmap = plt.cm.get_cmap('YlOrRd')  # Red to green colormap (reversed)
cmap.set_bad('white')  # Set NaN values to white
normalize = colors.Normalize(vmin=gdf_merged['Population'].min(), vmax=gdf_merged['Population'].max())

# 绘制地图
fig, ax = plt.subplots(figsize=(10, 10))
gdf_districts.plot(ax=ax, facecolor='none', edgecolor='black', linewidth=0.8)  # Plot the district outlines

# 根据人口数量填充颜色
infes_values = gdf_merged['Population'].fillna(np.nanmin(gdf_merged['Population']) - 1)  # Replace NaN values with a value lower than min
gdf_districts.plot(ax=ax, column=infes_values, cmap=cmap, linewidth=0, legend=False)

# 添加区域标签
for x, y, label in zip(gdf_merged.geometry.centroid.x, gdf_merged.geometry.centroid.y, gdf_merged['KGISDist_1']):
    ax.text(x, y, label, fontsize=8, ha='center', va='center')

# 设置图表标题和轴标签
ax.set_title('Population in Karnataka Districts')
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')

# 创建并添加颜色条
sm = plt.cm.ScalarMappable(cmap=cmap, norm=normalize)
sm.set_array([])
cbar = fig.colorbar(sm)
cbar.set_label('Population')

# 显示图表
plt.show()

 如图所示人口众多的班加罗尔在地图上看起来像消失了。因为班加罗尔在gdf_districts中被分为“班加罗尔(城市)”和“班加罗尔(乡村)”。但当合并区域时,合并函数有点混乱,在另一个数据帧中找不到完美匹配,这就是矩阵中产生的故障。

GeoPandas提供了各种自定义选项,使你的地图在视觉上更加吸引人。你可以调整颜色、应用主题样式、添加标签和包含其他元素,以提高地图的美学效果和清晰度。

总结

GeoPandas是一个多功能的库,使用户能够通过将地理空间数据与各种变量合并创建令人惊叹的地图。在本文中,我们探讨了使用GeoPandas在印度卡纳塔克邦地图上绘制变量的过程。通过遵循这里概述的步骤,你可以释放地理空间数据可视化的力量,并轻松创建自己引人入胜的地图。所以,继续探索各种可能性,让你的地图通过数据讲述引人入胜的故事。

请记住,GeoPandas的潜力远远超过这个例子。它可以用于分析和可视化来自不同领域的空间数据,使你能够发现隐藏的模式、了解各种关系并根据基于位置的洞见做出明智的决策。

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

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

相关文章

css实现鼠标悬停时滑出层提示

css实现鼠标悬停时滑出层提示的方法介绍 这是一个简单的鼠标悬停提示特效&#xff0c;类似于alt标签&#xff0c;不过这一种是用纯CSS实现&#xff0c;扩展性好&#xff0c;而且在提示的层里可以加入图片或其它布局&#xff0c;这个要根据你的需要了。 代码如下: <!DOCTYPE…

一次日志配置未生效问题排查记录

某天排查业务问题时,在我司的日志收集平台上,未能发现相关业务服务接口访问日志。经过和相关同事确定,发现业务服务未能将接口访问日志吐到日志收集平台,由此开启一段有点漫长的排查之旅。 业务服务是典型的SpringBoot web应用&#xff0c;日志记录采用slf4jlog4j2组合。 通过…

《BlazePose: On-device Real-time Body Pose tracking》在移动设备端实时人体姿态追踪(2006)

BlazePose: On-device Real-time Body Pose tracking 论文地址&#xff1a;https://arxiv.org/pdf/2006.10204.pdf GoogleBolg&#xff1a;https://ai.googleblog.com/2020/08/on-device-real-time-body-pose-tracking.html 模型下载地址&#xff1a;https://github.com/PIN…

clop勒索软件攻击活动频发,西门子能源中招

自6月初被通报利用MOVEit Transfer服务器中的零日漏洞窃取加密组织数据后&#xff0c;clop勒索软件攻击活动频繁&#xff0c;全球陆续发生了多起clop软件攻击事件。本周&#xff0c;Clop团伙在其数据泄露网站上列出了西门子能源公司的信息&#xff0c;表示该公司的数据被泄露。…

must declare a single constructor

1、异常详细描述 Test ignored.org.junit.platform.commons.PreconditionViolationException: Class [org.bc.offer.datastructure.Stack] must declare a single constructorProcess finished with exit code -12、源码 package org.bc.offer.datastructure;import org.jun…

SUI Token释放计划时间表和几个相关问题

Sui主网于2023年5月3日正式上线&#xff0c;网络原生token SUI用于链上交易、支付gas费用、保护网络以及提供链上流动性。SUI的长期流通总供应量为100亿。在主网上线时&#xff0c;大约有5%的token在流通&#xff0c;其余的将按照下面的图表所示的计划释放&#xff0c;以保持网…

特异性抑制剂:FAPI-4 NH2 ,FAPI4Amine,成纤维细胞活化蛋白 (FAP) 抑制剂连接氨基

编辑来源||陕西新研博美生物科技有限公司小编MISSwu FAPI-4-NH2中FAPI是FAP的特异性抑制剂。在这些FAPI中&#xff0c;含有DOTA配体(FAPI-04)的[68Ga]Ga-DOTA-FAPI-04 PET/CT能显示出良好的体内药代动力学&#xff0c;导致快速kidney清除和注射后10分钟至3小时的低背景活性。 …

JAVA C++的权限区别

访问级别的名称和个数&#xff1a;在C中&#xff0c;有三个访问级别关键字&#xff1a;public、protected和private。而在Java中&#xff0c;有四个访问级别关键字&#xff1a;public、protected、private和默认&#xff08;没有关键字修饰&#xff09;。 默认访问级别不同&…

【三层交换机】网络杂谈(16)之三层交换机技术

涉及知识点 什么是三层交换机&#xff0c;三层交换技术的由来&#xff0c;三层交换机&#xff0c;三层交换的应用范例。深入了解三层交换机技术。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多内容可去其主页关注下哈&#xff0c;不胜感激 文章目录 涉及知…

SAP-QM质量管理视图字段解析

QM物料授权:如果在物料主记录中输入物料授权组,则系统将检查(在物料基础上)用户是否具有对以上名称对象的授权。如果未输入授权组,则不进行授权检查。要通过授权检查,用户需要 物料授权,其中包含有字段值所表示的相关授权组。 收货处理时间:收货后的加盐时间(天数)如…

深度学习(五)—— 卷积神经网络(CNN)

卷积神经网络&#xff08;CNN&#xff09; 1 CNN的组成2 卷积层2.1 卷积的计算2.2 多通道卷积2.3 多卷积核卷积2.4 特征图大小2.5 卷积层 api 实现 3 池化层3.1 最大池化3.2 平均池化 4 全连接层5 CNN的构建5.1 数据加载5.2 数据处理5.3 模型搭建5.4 模型编译5.5 模型训练5.6 模…

Go语言使用net/http实现简单登录验证和文件上传功能

最近再看Go语言web编程&#xff0c;使用net/http模块编写了一个简单的登录验证和文件上传的功能&#xff0c;在此做个简单记录。 目录 1.文件目录结构 2.编译运行 3.用户登录 4.文件上传 5.mime/multipart模拟form表单上传文件 代码如下&#xff1a; package mainimport …

【C语言】递归实战,通过几个例子带你深入走进递归算法

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello&#xff0c;这里是君兮_&#xff0c;今天给大家带来一篇递归的实战教学文章&#xff0c;由于递归算法不仅对于初学者十分不易理解并且在我们以后的数据结构中也非常重要。我们今天就通过几个应用递归的实际例子来给…

Apache Doris 在头部票务平台的应用实践:报表开发提速数十倍、毫秒级查询响应

作者&#xff5c;国内某头部票务平台 大数据开发工程师 刘振伟 本文导读&#xff1a; 随着在线平台的发展&#xff0c;票务行业逐渐实现了数字化经营&#xff0c;企业可以通过在线销售、数字营销和数据分析等方式提升运营效率与用户体验。基于此&#xff0c;国内某头部票务平…

【Java】Java核心 81:Git 教程(4)差异比较 版本回退

文章目录 06.GIT本地操作-差异比较目标内容小结 07.GIT本地操作-版本回退目标内容小结 在Git中&#xff0c;可以使用差异比较命令和版本回退命令来查看文件之间的差异并回退到早期的版本。 以下是对这些操作的简要解释&#xff1a; 差异比较&#xff1a;你可以使用git diff命…

本地Linux 部署 Dashy 并远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章&#xff1a;本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…

video-04-videojs配置及使用

videojs是一种轻框架&#xff0c;可以帮我们快速开发一个video视频组件 目录 一、参考资料 二、引入videojs 三、简单了解使用 四、配置项和事件 4.1 常用配置项 4.2 常用事件 4.3 常用方法 4.4 网络状态 4.5 播放状态 4.6 视频控制 五、实例&#xff08;可直接复制…

升级iOS 17测试版后如何降级?iOS17降级教程

对于已经升级到 iOS 17 测试版的用户&#xff0c;如果在体验过程中&#xff0c;感觉到并不是那么稳定&#xff0c;例如出现应用程序不适配、电池续航下降、功能无法正常启用等问题&#xff0c;想要进行降级操作&#xff0c;可以参考本教程。 降级前注意事项&#xff1a; 1.由于…

Android 自定义手写签字板,签署姓名,签名

各位大佬好又来记笔记了~ 今天要做的是签字板&#xff0c;实现客户签名功能&#xff0c;直接看效果&#xff1a; 逐个进行签字&#xff0c;可以避免连笔导致识别不清问题。就是想要客户一个一个写&#xff0c;认真写~~。 下面方框显示的“王某才” 其实是三张图片&#xff0c;…

【算法题】动态规划中级阶段之不同路径、最小路径和

动态规划中级阶段 前言一、不同路径1.1、思路1.2、代码实现 二、不同路径 II2.1、思路2.2、代码实现 三、最小路径和3.1、思路3.3、代码实现 总结 前言 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种解决多阶段决策过程最优化问题的方法。它…