首页 > 解决方案 > Geopandas - 带有大陆数据的绘图图表

问题描述

我正在尝试用 Geopandas 绘制大陆上的数据。

我从每个国家/地区记录的票证数量的数据透视表中获得以下票证数量:

    Number of Tickets
region
Africa            370
Americas         1130
Asia              873
Europe            671
Oceania           445

在我的票务列表数据框中,我记录了每个国家/地区的案例。每个国家都映射到一个地区和一个大陆。按照逻辑,记录的每张工单都指定了一个国家、地区和大陆。

为了能够绘制数据,我将 Geopandas 数据框(国家几何)与我的 3 个字母国家代码的票证数据框合并,并确保生成的数据框是一个地理数据框:

tickets_region = pd.merge(world, tickets, left_on='ISO_A3', right_on='code-3')

type(tickets_region)
geopandas.geodataframe.GeoDataFrame

我尝试使用以下代码绘制数据:

fig, ax = plt.subplots()
ax = tickets_region.plot('continent', cmap='Reds',scheme='headtailbreaks')
ax.tick_params(left=False, labelleft=False, bottom=False, labelbottom=False)
plt.title('Number of Tickets by Continent')
plt.box(False)
plt.show()

然而,这个代码块永远不会完成,会占用内存和 CPU 周期,我必须按 Ctrl-C 才能将其删除。相同的代码适用于“code-3”(3 个字母的国家/地区代码。)

我认为这是由于 geojson 文件中未定义“大陆”地理,但我希望 Python 通过添加票数来填充。我看到我的期望在某处有一个错误的逻辑,但我看不到这一点。

关于如何使大陆情节发挥作用的任何想法?

谢谢你。

编辑:“世界”数据框是从https://datahub.io/core/geo-countries下载的 geojson 文件

标签: pythonpython-3.xgeopandas

解决方案


您可以使用dissolve()GeoPandas 数据框中的方法。您可以在此处查看 GeoPandas 文档。您的代码可以这样修改:

tickets_region = tickets_region.dissolve(by='continent', aggfunc='sum')

fig, ax = plt.subplots()
ax = tickets_region.plot(column='Number of Tickets', cmap='Reds',scheme='headtailbreaks')
ax.tick_params(left=False, labelleft=False, bottom=False, labelbottom=False)
plt.title('Number of Tickets by Continent')
plt.box(False)
plt.show()

推荐阅读