首页软件基础教程GeoPandas【GeoPandas空间数...

【GeoPandas空间数据分析】7.绘制分级统计图(Choropleth Maps)


本系列文章是根据GeoPandas官方文档翻译整理,学习任何一个Python第三方库,其官方文档都是最好的学习资料。相比网络搜索得到的一些资料,官方文档是权威的一手资料,其内容全面、准确可靠。通过官方文档入手,能够保证学习认知不会有大偏差。在学习完官方文档后,可以在寻找其他资料进一步学习。

点击“阅读原文”或者直接访问下方链接,查看翻译整理的“GeoPandas 0.12.2 中文文档”。

https://www.mizhushare.com/docs
本系列文章配套代码获取有以下两种途径:
  • 可以通过百度网盘获取,需要在本地配置代码运行环境:
链接:https://pan.baidu.com/s/185Qs6RpVhyP2nm9VV39Ehw?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/geopandas




GeoPandas基于matplotlib库提供了一个制作地图的高级接口。
GeoSeriesGeoDataFrame上使用plot()方法可以很容易的绘制图形。

一般来说,在matplotlib中可以传递给pyplot的任何选项都可以传递给plot()方法。

本次,仍以GeoPandas自带的world数据集为例:

01

绘图


GeoPandas可以轻松创建 Choropleth 地图(每个形状的颜色基于关联变量的值)。只需使用 plot 命令,并将列参数设置为需要使用其值分配颜色的列。

1>>> world = gpd.read_file('./datasets/naturalearth_lowres/naturalearth_lowres.shp')
2>>> world = world[world.name!="Antarctica"# 去除南极洲
3
4# 计算人均GPD数值
5>>> world['gdp_per_cap'] = world.gdp_md_est / world.pop_est
6
7# column参数为需要使用其值分配颜色的列
8>>> world.plot(figsize=(10,8) , column="gdp_per_cap")

绘图效果如下所示:


02

添加图例


绘制地图时,可以使用 legend 参数启用图例:

1>>> import matplotlib.pyplot as plt
2
3>>> fig , ax = plt.subplots(1,1,figsize=(10,8))
4
5>>> world.plot(column="gdp_per_cap" , ax=ax , legend=True)

绘图效果如下所示:

但是,此时的图例和绘图轴的默认外观可能并不理想。

可以定义绘图轴(使用 ax)和图例轴(使用 cax),然后将它们传递给 plot()

以下示例使用 mpl_toolkits 垂直对齐绘图轴和图例轴:

1>>> from mpl_toolkits.axes_grid1 import make_axes_locatable
2
3>>> fig , ax = plt.subplots(1,1,figsize=(10,8))
4
5>>> divider = make_axes_locatable(ax)
6
7>>> cax = divider.append_axes("right" , size="5%" , pad=1)
8
9>>> world.plot(ax=ax , column="gdp_per_cap" , legend=True , cax=cax)

绘图效果如下所示:

以下示例在地图下方绘制颜色条并使用 legend_kwds 参数添加标签:

1>>> fig , ax = plt.subplots(1,1,figsize=(10,8))
2
3>>> world.plot(column='gdp_per_cap',
4           ax=ax,
5           legend=True,
6           legend_kwds={'label'"Population by Country",
7                        'orientation'"horizontal"})

绘图效果如下所示:

03

设置颜色


可以使用 cmap 选项修改 plot() 使用的颜色(有关颜色图的完整列表,请参阅 matplotlib 官网):

1>>> world.plot(column='gdp_per_cap' , cmap="OrRd")

绘图效果如下所示:

当您只想显示边界时,要使颜色透明,您有两种选择。

一种选择是执行 world.plot(facecolor=”none”, edgecolor=”black”)。然而,需要注意的是“none”None 在使用 facecolor 的上下文中是不同的,并且它们做相反的事情。None 实际上会添加一种颜色。

1>>> world.plot(facecolor="none", edgecolor="black")

绘图效果如下所示:

第二种选择是使用 world.boundary.plot(),该方式更加明确和清晰。

1>>> world.boundary.plot()

绘图效果如下所示:

颜色图的缩放方式可以使用 scheme 选项进行操作(需要安装 mapclassify,未安装的话可以通过 conda install -c conda-forge mapclassify 来完成)。

scheme选项可以设置为mapclassify提供的任何方案(例如 ‘box_plot’、’equal_interval’、’fisher_jenks’、’fisher_jenks_sampled’、’headtail_breaks’、’jenks_caspall’、’jenks_caspall_forced’、’jenks_caspall_sampled’’max_p_classifier’‘maximum_breaks’、’natural_breaks’、’quantiles’、’percentiles’、’std_mean’ 或 ‘user_defined’)。参数可以通过 classification_kwds dict 传递。有关这些地图分类方案的更多详细信息,请参阅 mapclassify 文档。

1>>> world.plot(column='gdp_per_cap', cmap='OrRd', scheme="quantiles")

绘图效果如下所示:

04

缺失值处理


在某些情况下,可能需要绘制包含缺失值的数据。但是 Geopandas(从 0.7 版本开始)默认忽略这些缺失值。

1>>> import numpy as np
2
3# 设置一些缺失值
4>>> world.loc[np.random.choice(world.index, 40), 'gdp_per_cap'] = np.nan
5
6>>> world.plot(column='gdp_per_cap')

绘图效果如下所示:

但是,通过 missing_kwds 参数可以指定包含 None NaN 的特征的样式和标签。

1>>> world.plot(column='gdp_per_cap' , missing_kwds={'color':'lightgrey'})

绘图效果如下所示:

还可以为缺失值设置更为复杂的可视化效果:

 1>>> world.plot(
2    column="gdp_per_cap",
3    legend=True,
4    scheme="quantiles",
5    figsize=(1510),
6    missing_kwds={
7        "color""lightgrey",
8        "edgecolor""red",
9        "hatch""///",
10        "label""Missing values",
11    },
12)

绘图效果如下所示:

05

轴标签


 可以使用 set_axis_off()axis(“off”) 关闭轴标签。

1>>> ax = world.plot()
2>>> ax.set_axis_off()

绘图效果如下所示:


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments