使用 GeoPandas 绘制地理空间数据
GeoPandas 是一个开源工具,用于向 Pandas 对象添加对地理数据的支持。在这篇文章中,我们将使用 GeoPandas 和 Matplotlib 来绘制地理空间数据。
安装
我们将安装 GeoPandas、Matplotlib、NumPy 和 Pandas。
pip install geopandas
pip install matplotlib
pip install numpy
pip install pandas
注意:如果您不想在计算机上本地安装这些模块,请使用 Jupyter Notebook 或 Google Colab。
入门
导入模块和数据集
我们将为数据框数据结构导入 Pandas,为一些数学函数导入 NumPy,为支持和处理地理空间数据导入 GeoPandas,为实际绘制地图导入 Matplotlib。
import pandas as pd
import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt
GeoPandas 为我们提供了一些默认数据集以及它的安装。让我们阅读其中一个数据集。
Python3
import pandas as pd
import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world.head()
Python3
world.plot()
Python3
worldfiltered = world[world.continent == "Asia"]
worldfiltered.plot(column ='gdp_md_est', cmap ='Reds')
Python3
world.plot(column ='pop_est')
Python3
fig, ax = plt.subplots(1, figsize =(16, 8))
world.plot(ax = ax, color ='black')
world.plot(ax = ax, column ='pop_est', cmap ='Reds')
Python3
from mpl_toolkits.axes_grid1 import make_axes_locatable
fig, ax = plt.subplots(1, figsize =(16, 8),
facecolor ='lightblue')
world.plot(ax = ax, color ='black')
world.plot(ax = ax, column ='pop_est', cmap ='Reds',
edgecolors ='grey')
# axis for the color bar
div = make_axes_locatable(ax)
cax = div.append_axes("right", size ="3 %", pad = 0.05)
# color bar
vmax = world.pop_est.max()
mappable = plt.cm.ScalarMappable(cmap ='Reds',
norm = plt.Normalize(vmin = 0, vmax = vmax))
cbar = fig.colorbar(mappable, cax)
ax.axis('off')
plt.show()
输出:
其他一些可以使用的数据集是“naturalearth_cities”和“nybb”。以后可以随意尝试它们。我们可以使用世界并使用 Matplotlib 绘制相同的图。
Python3
world.plot()
输出:
分析数据集
现在,如果我们看世界,我们有很多领域。其中之一是 GDP 估计值(或gdp_md_est )。然而,为了展示在 pandas 中过滤数据是多么容易,让我们过滤掉除亚洲以外的所有大陆。
Python3
worldfiltered = world[world.continent == "Asia"]
worldfiltered.plot(column ='gdp_md_est', cmap ='Reds')
cmap属性用于在指定的阴影中绘制数据。较深的阴影意味着较高的价值,而较浅的阴影意味着较低的价值。现在,让我们分析人口估计( pop_est )的数据。
Python3
world.plot(column ='pop_est')
输出:
上图在传达数据方面不是很好。因此,让我们更改一些属性以使其更易于理解。首先,让我们增加图形的大小,然后为它设置一个轴。我们首先在轴上绘制没有任何数据的世界地图,然后用红色阴影覆盖上面的数据。这样地图更加清晰和黑暗,使数据更易于理解。然而,这张地图仍然有点模糊,不会告诉我们阴影的含义。
Python3
fig, ax = plt.subplots(1, figsize =(16, 8))
world.plot(ax = ax, color ='black')
world.plot(ax = ax, column ='pop_est', cmap ='Reds')
输出:
让我们导入允许我们在图中制作分隔线的工具包。在此之后,我们将像之前一样绘制图形,但这次我们将添加一个面部颜色。 facecolor属性会将背景更改为它设置的颜色(在本例中为浅蓝色)。现在我们需要创建一个分隔线来在图表中创建颜色框,就像 HTML 中的分隔线一样。我们正在创建一个分隔线并设置它的属性,如大小、对齐方式等。
然后我们需要在我们创建的分隔线中创建颜色框。所以很明显,颜色框中的最大值将是数据集中的最高人口,而最低值将为零。
Python3
from mpl_toolkits.axes_grid1 import make_axes_locatable
fig, ax = plt.subplots(1, figsize =(16, 8),
facecolor ='lightblue')
world.plot(ax = ax, color ='black')
world.plot(ax = ax, column ='pop_est', cmap ='Reds',
edgecolors ='grey')
# axis for the color bar
div = make_axes_locatable(ax)
cax = div.append_axes("right", size ="3 %", pad = 0.05)
# color bar
vmax = world.pop_est.max()
mappable = plt.cm.ScalarMappable(cmap ='Reds',
norm = plt.Normalize(vmin = 0, vmax = vmax))
cbar = fig.colorbar(mappable, cax)
ax.axis('off')
plt.show()
输出:
因此,在本文中,我们了解了如何使用 GeoPandas 获取地理空间数据并使用 Matplotlib 绘制它。自定义数据集可用于分析特定数据,也可使用城市数据。此外,GeoPandas 可以与 Open Street Maps 一起使用,它提供了非常具体的地理空间数据(例如,街道、城市中的医院等)。相同的知识可以进一步扩展,并可用于特定的统计和数据分析。