我正在尝试用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通过将票证数量相加来填充它。我看到我的期望在某处有一个被打破的逻辑,但我看不到这一点。
有没有关于如何让这个大陆图工作的想法?
谢谢。
编辑:"world“数据帧是从https://datahub.io/core/geo-countries下载的geojson文件
发布于 2020-10-12 21:28:48
您可以使用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()https://stackoverflow.com/questions/64316074
复制相似问题