Python 世界各国 Plotly Choropleth 地图

问题描述 投票:0回答:1

经过比我应该等待的时间更长的时间后,是时候询问一些专家了。我正在使用以下数据集https://gadm.org/data.html。我已将世界多边形下载为 .gpkg 文件,并且正在查看多边形的第 1 级。我的最终目标是创建一个州或州同等级别的世界分区统计图。我有以下代码,可以一直运行到 choropleth 部分。

import geopandas as gpd
import pandas as pd
import shapely
import matplotlib.pyplot as plt
import json
import plotly.graph_objects as go
import numpy as np

# set options so columns aren't hidden 
pd.set_option('display.max_columns', None)

# set options so rows aren't hidden 
pd.set_option('display.max_rows', None)

'''It is possible to reference multiple layers in the gadm gpkg file. 
0 is country, 1 is state, and 2 is county. 
There are levels of more granularity but are not relevant to the US
https://gadm.org/download_country.html
'''

# pulling county level locations 
gdf_1 = gpd.read_file("gadm_410-levels.gpkg", layer="ADM_1")

# creating place holder color value
gdf_1['randNumCol'] = np.random.randint(0, 1500000, gdf_1.shape[0])

# aggregate state loss for randNumCol
states_fin_agg = gdf_1.groupby(['GID_0','COUNTRY','GID_1','NAME_1','VARNAME_1','NL_NAME_1'
                                ,'TYPE_1','ENGTYPE_1','CC_1','HASC_1','ISO_1','geometry'])['randNumCol'].\
                                sum().reset_index()

# incurred loss zeros
states_fin_agg['randNumCol'] = states_fin_agg['randNumCol'].fillna(0)

# keeping only necessary columns
states_fin_agg = states_fin_agg[['COUNTRY','GID_1','NAME_1','randNumCol','geometry']]

# create geodataframe
states_fin_agg = gpd.GeoDataFrame(states_fin_agg)

# creating JSON
geojson = json.loads(states_fin_agg.to_json())

# choroplethmapbox
data = go.Choroplethmapbox(geojson=geojson
                           ,locations=states_fin_agg['GID_1']
                           ,z=states_fin_agg['randNumCol']
                           ,colorscale='Viridis'
                           ,marker_opacity=1
                           ,marker_line_width=0.1)

# graphing choropleth
fig = go.Figure(data)
fig.show()

图表由于内存分配而崩溃。我的猜测是这是我的问题的症状,而不是实际的问题。 df 中的几何列是多边形,因此这可能是问题所在。也就是说,当我使用 .explode() 转换为多边形时,我最终会得到相同状态的多行,甚至更多行的数据。

有更好的方法吗?最终目标是在 Choroplethmapbox() 中拥有一张世界地图,其中颜色变量为“randNumCol”。任何帮助将不胜感激。

python gis polygon choropleth
1个回答
0
投票

我发现的最佳选择是使用 QGIS。情节太慢了。

© www.soinside.com 2019 - 2024. All rights reserved.