如果分析的数据与地域相关,那么,把分析结果结合地图一起展示的话,会让可视化的效果得到极大的提升。

比如,分析各省GDP数据,人口数据,用柱状图,饼图之类的虽然都可以展示分析结果,
不过,如果能在全国的地图上展示各省的分析结果的话,会让人留下更加深刻的印象。

将数据的分析结果展示在地图上,难点在于:

  1. 如何绘制地图,地图是展示数据的基础,如何绘制出需要的地图区域是第一步
  2. 数据和地图关联,数据最终要显示在地图上,数据如何与地理坐标关联也是重要的一步
  3. 地图上展示数据,也就是要在地图上绘制不同的颜色或者几何形状来表达不同的数据

解决了上面3个难题,就能够结合地图做一些基本的数据展示了。
本篇通过一个基于南京各个区地理信息的分析示例,来演示如何一步步通过地图来展示分析结果。

1. 绘制地图

第一步是绘制地图,其实地图就是一块块不规则的多边形拼接起来的。
在本篇的示例中,各个多边形就是南京的各个区

绘制多边形不难,难的是如何得到各个多边形的顶点坐标。
好在现在有很多的开放地理信息平台,可以让我们获取到想要的地理信息。

1.1. 获取地理信息

比如,通过阿里的DataV数据可视化平台,可以获取南京各个区的地理范围信息。

在这个平台上,左边选择区域,右边会生成对应范围的地理信息的数据。
地理信息数据是json格式。

1.2. 展示地理信息

为了读取地理信息数据并展示,需要用到一个 GeoPandas 的库。
pip 安装很简单:

$ pip install geopandas

geopandas可以直接读取DataV数据可视化平台生成的JSON数据并展示。

import geopandas as gpd

df_geo = gpd.read_file(
"https://geo.datav.aliyun.com/areas_v3/bound/320100_full.json"
)
df_geo


json文件的HTTP地址DataV数据可视化平台就是在上生成的。
这个文件中的关键字段就是 geometry,其中的内容就是各个区的多边形形状的各个顶点的经纬度坐标。

展示数据:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
fig.set_size_inches(8, 8) # df_geo就是上面通过geopandas读取的数据
df_geo.plot(
ax=ax,
column="name",
cmap="plasma",
edgecolor="k",
legend=True,
legend_kwds={"loc": "lower left"}
)
plt.show()


其中主要参数的含义:

  1. axmatplotlib生成的子图,这里就是数据要绘制的位置
  2. column:作为不同区域的名称,这里就是南京各个区的名称
  3. cmap:一组颜色,分别对应不同的区
  4. edgecolor:每个多边形边缘的颜色,这里设置的是黑色
  5. legend:是否显示图例
  6. legend_kwds:设置图例的配置信息,这里只设置了图例的位置

2. 地图和数据关联

首先生成一些测试数据:

# 删除 df_geo 中一些不必要的列
df_geo = df_geo.drop(columns=["childrenNum", "level", "parent", "subFeatureIndex"]) # 南京各个区的名称
area_names = df_geo.loc[:, "name"] # df_val为测试数据,其中name列是各个区的名称
# value 列是一些随机数,模拟各个区的人口,GDP等数据
df_val = pd.DataFrame({
"name": area_names.tolist(),
"value": np.random.randint(10, 10000, len(area_names))
})

测试数据 df_val 模拟其他途径得到的业务数据,
下面要将 df_val 中的指展示到地图上,就要先把 df_valdf_geo 结合起来。

# 以 name 列作为结合两个数据集的依据
df = pd.merge(df_geo, df_val, on="name", how="left")
df


这样,我们就得到了同时包含地理信息(geometry)业务数据(value)的数据集了。

3. 地图上展示数据

接下来就是展示数据了,下面演示两种在地图上展示数据的方式。

3.1. 热力图方式

根据 value 值的不同,用渐变色来显示不同区的颜色。

fig, ax = plt.subplots()
fig.set_size_inches(8, 8)
ax.axis("off") df.plot(
ax=ax,
column="value",
cmap="plasma",
edgecolor="k",
legend=True,
legend_kwds={'label': "value", 'shrink':0.5},
) for index in df.index:
x = df.iloc[index].geometry.centroid.x
y = df.iloc[index].geometry.centroid.y
name = df.iloc[index]["name"]
if name in ["建邺区", "鼓楼区", "玄武区", "秦淮区"]:
ax.text(x, y, name, ha="center", va="center", fontsize=8)
else:
ax.text(x, y, name, ha="center", va="center") plt.show()


其中,"建邺区", "鼓楼区", "玄武区", "秦淮区" 四个区的面积比较小,
所以字体稍微调小了一些。

3.2. 分类展示

value值分为3类,每类用不同的形式来表示。

  • value < 3000
  • 3000 <= value < 5000
  • value >= 5000
import matplotlib.patches as mpatches

fig, ax = plt.subplots()
fig.set_size_inches(5, 10)
ax.axis("off")
legend_list = [] df[df["value"] < 3000].plot(
ax=ax,
color="lightblue",
edgecolor="k",
hatch="\\\\",
legend=False,
)
legend_list.append(
mpatches.Patch(
facecolor="lightblue",
edgecolor="black", hatch="\\\\", label="value<3000"
)
) df[(df["value"] >= 3000) & (df["value"] < 5000)].plot(
ax=ax,
color="lightgreen",
edgecolor="k",
hatch="o",
legend=False,
)
legend_list.append(
mpatches.Patch(
facecolor="lightgreen",
edgecolor="black", hatch="o", label="3000<=value<5000")
) df[df["value"] >= 5000].plot(
ax=ax,
color="r",
edgecolor="k",
hatch="*",
legend=False,
)
legend_list.append(mpatches.Patch(
facecolor="r",
edgecolor="black", hatch="*", label="value>=5000")) ax.legend(handles = legend_list,
loc=(1, 0.5),
title="value 等级",
fontsize=12) plt.show()

4. 总结

结合地理信息展示数据,让数据更加的生动,特别是很多数据分析场景本身就和地理信息密切相关。
除了基于地域的各种经济或者人口等等的相关数据,
还有各类气象数据,如能和地理信息结合展示的话,会让人对整体情况一目了然。

文中用到的主要资源:

【matplotlib基础】--结合地图的更多相关文章

  1. 数据分析与展示——Matplotlib基础绘图函数示例

    Matplotlib库入门 Matplotlib基础绘图函数示例 pyplot基础图表函数概述 函数 说明 plt.plot(x,y,fmt, ...) 绘制一个坐标图 plt.boxplot(dat ...

  2. Matplotlib Toolkits:地图绘制工具

    Matplotlib Toolkits:地图绘制工具 有没有一种可以直接在详细地图(如谷歌地图)上绘制上百万坐标点的工具???谷歌地图坐标点多了也不能绘制了. Basemap (Not distrib ...

  3. Matplotlib基础图形之散点图

    Matplotlib基础图形之散点图 散点图特点: 1.散点图显示两组数据的值,每个点的坐标位置由变量的值决定 2.由一组不连续的点组成,用于观察两种变量的相关性(正相关,负相关,不相关) 3.例如: ...

  4. Matplotlib基础知识

    Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis水平和垂直的轴线 x轴和y轴刻度 tick刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y轴刻度标签 ...

  5. matplotlib基础

    Matplotlib 基础 注:本文中的程序都默认引入了numpy库和matplotlib库,并且分别简写为np与plt:如果读者不知道怎么使用numpy库,可以移步到这一博客上进行简单的学习 一.简 ...

  6. Matplotlib基础使用

    matplotlib 一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis 水平和垂直的轴线 x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括最小刻度 ...

  7. 模块简介与matplotlib基础

    模块简介与matplotlib基础 1.基本概念 1.1数据分析 对已知的数据进行分析,提取出一些有价值的信息. 1.2数据挖掘 对大量的数据进行分析与挖掘,得到一些未知的,有价值的信息. 1.3数据 ...

  8. [笔记]SciPy、Matplotlib基础操作

    NumPy.SciPy.Matplotlib,Python下机器学习三大利器.上一篇讲了NumPy基础操作,这节讲讲SciPy和Matplotlib.目前接触到的东西不多,以后再遇到些比较常用的再更新 ...

  9. 第二周 数据分析之展示 Matplotlib基础绘图函数实例

    Pyplot基础图表函数 Pyplot饼图的绘制: Pyplot直方图的绘制: Pyplot极坐标图的绘制: Pyplot散点图的绘制: 单元小结: import numpy as np import ...

  10. python数据图形化—— matplotlib 基础应用

    matplotlib是python中常用的数据图形化工具,用法跟matlab有点相似.调用简单,功能强大.在Windows下可以通过命令行 pip install matplotlib 来进行安装. ...

随机推荐

  1. uniapp主题切换功能的第一种实现方式(scss变量+vuex)

    随着用户端体验的不断提升,很多应用在上线的时候都要求做不同的主题,最基本的就是白天与夜间主题. 就像b站app主题切换,像这样的 uniapp因为能轻松实现多端发布而得到很多开发者的青睐,但每个端的实 ...

  2. 【Netty】02-入门

    二. Netty 入门 1. 概述 1.1 Netty 是什么? Netty is an asynchronous event-driven network application framework ...

  3. 【python基础】类-类属性

    在初始类中,我们介绍了如何访问类属性,除了访问类属性外还有其他操作类属性的情况,我们将在这里做详细介绍: 1.给类属性指定默认值 类中的每个属性都必须有初始值,哪怕这个值是0或者空字符串.在有些情况下 ...

  4. Python编程和数据科学中的数据处理:如何从数据中提取有用的信息和数据

    目录 引言 数据分析和数据处理是数据科学和人工智能领域的核心话题之一.数据科学家和工程师需要从大量的数据中提取有用的信息和知识,以便更好地理解和预测现实世界中的事件.本文将介绍Python编程和数据科 ...

  5. mysql索引优化-01

    1.1索引是什么?   mysql官方对于索引的定义:可以帮助mysql高效的获取数据的数据结构.   mysql在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构给以某种引 ...

  6. 组合数学_第4章_Polya定理

    第4章 Polya定理 4.1 群的概念 4.1.1 群的定义 给定一个集合\(G=\{a,b,c,\cdots\}\)和集合\(G\)上的二元运算"\(\cdot\)",并满足下 ...

  7. Lord Of The Root: 1.0.1实战

    前言 Description:我创建这台机器是为了帮助其他人学习一些基本的CTF黑客策略和一些工具.我瞄准了这台机器,使其在难度上与我在OSCP上破解的机器非常相似. 这是一个引导到根计算机将不需要任 ...

  8. 脱发秘籍:前端Chrome调试技巧汇总

    Chrome浏览器调试工具的核心功能: 注:本文测试.截图均为Edge浏览器(内核是Chromium),浏览器内核可了解<有哪些浏览器/内核?> 00.基础操作汇总 操作类型 快捷键/说明 ...

  9. 了解web网络基础

    TCP/IP 协议:一种规则,规定不同计算机操作系统,硬件之间怎么通信的一种规则 像这样把互联网相关联的协议集合起来总称为TCP/IP协议. TCP/IP分层管理 按照组层次分为以下四层: 应用层:决 ...

  10. NumPy(1)-常用的初始化方法

    一.NumPy介绍 NumPy是Python中科学计算的基础包,它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学.逻辑.形状操作 ...