Geopandas - 带有大陆数据的图表

Geopandas - plot chart with continent data

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

根据每个国家/地区记录的票数,我的枢轴 table 有以下票数:

    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 文件中未定义 'continent' 地理,但我希望 Python 通过添加门票数量来填充。我看到我的期望在某处有错误的逻辑,但我看不到。

关于如何让大陆情节发挥作用有什么想法吗?

谢谢。

编辑:“world”数据框是从 https://datahub.io/core/geo-countries

下载的 geojson 文件

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

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()