使用 python 的 plotly choropleth 绘制 GeoJSON 问题

Issue plotting GeoJSON with python's plotly cloropleth

我正在尝试从具有以下结构的 geojson 进行绘图:

import geopandas as gpd
states = gpd.read_file('diamante.geojson')
display(states.head())

这是通过使用 mygeoconverter 从 .shp、shx、prj 等转换获得的。 link 列是我稍后使用适当标签与另一个数据框合并的参考。当我从 geopandas 获得基本图时,形状信息似乎很好。

states.plot(aspect=1)

我不知道为什么我需要 aspect=1 参数才能工作。当尝试使用 plotly 绘制我的地图时,我得到以下信息:

import pyproj
#states.to_crs(pyproj.CRS.from_epsg(4326), inplace=True)
fig = px.choropleth(states, geojson=states['geometry'], locations=states.index, color=states.varon)
fig.show()

注释行试图基于另一个 post 解决问题,但似乎没有任何作用。我是地图新手,所以我不知道要寻找什么。 Link to my geojson file.

此外,从文档中添加以下行会显示空白图表。

fig.update_geos(fitbounds="locations", visible=False)
  • 您需要计算您的 CRS。下面的代码假定您的多边形在 UK UTM CRS 系统中表示。这是 WSG84 的投影,因此 plotly 可以使用它
  • 你的 CRS 以百万为单位,所以不是 WSG84
  • 没有 fitbounds 我在世界地图上找不到 geojson
import requests, json
import geopandas as gpd
import plotly.express as px

gdf = gpd.GeoDataFrame.from_features(requests.get("https://pastebin.com/raw/GwUsskWs").json()["features"])

gdf = gdf.set_crs("EPSG:32630").to_crs("EPSG:4326").set_index("link", drop=False)

fig = px.choropleth(gdf, geojson=json.loads(gdf.geometry.to_json()), locations="link", color="varon")
fig.update_geos(fitbounds="locations", visible=False)