本系列文章是根据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
库提供了一个制作地图的高级接口。GeoSeries
或GeoDataFrame
上使用plot()
方法可以很容易的绘制图形。一般来说,在matplotlib
中可以传递给pyplot
的任何选项都可以传递给plot()
方法。
本次,仍以GeoPandas自带的world
数据集为例:
绘图:
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")
绘图效果如下所示:
添加图例:
绘制地图时,可以使用 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"})
绘图效果如下所示:
设置颜色:
可以使用 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")
绘图效果如下所示:
缺失值处理:
在某些情况下,可能需要绘制包含缺失值的数据。但是 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=(15, 10),
6 missing_kwds={
7 "color": "lightgrey",
8 "edgecolor": "red",
9 "hatch": "///",
10 "label": "Missing values",
11 },
12)
绘图效果如下所示:
轴标签:
可以使用 set_axis_off()
或 axis(“off”)
关闭轴标签。
1>>> ax = world.plot()
2>>> ax.set_axis_off()
绘图效果如下所示:
本篇文章来源于微信公众号: 码农设计师