显示白页而不是地图的 Choropleth 地图

Choropleth map showing white page instead of the map

我正在制作等值线图,它显示的是白页而不是此处显示的地图 https://i.stack.imgur.com/boYKY.png

我在同一个文件夹中下载了 geojson 和 excel 文件。

geojson https://drive.google.com/file/d/1N-rp9yHqE1Rzn2VxoAAweJ8-5XIjk61j/view?usp=sharing excelhttps://docs.google.com/spreadsheets/d/1NKeUg20XxJe0jccMgjj9pMxrTIIWeuQk/edit?usp=sharing&ouid=100050178655652050254&rtpof=true&sd=true

这是我的代码

import json
import numpy as np
import pandas as pd
import plotly.express as px

df = pd.read_excel('kraje.xlsx', sheet_name='List1')

regions_json = json.load(open("KRAJE.geojson", "r"))

fig = px.choropleth(df,
             locations="K_KRAJ",
             geojson=regions_json,
             color='OB1506')
fig.show()

我正在查看地图的浏览器控制台显示 this

我在brave浏览器中使用jupyter notebook

谁能帮我解决这个问题?谢谢

编辑:

我找到了正确的 geojson 文件,但现在遇到了不同的问题。只有一个区域是彩色的,甚至没有正确的颜色,即使在我的区域之外,地图的其余部分也是以相同的颜色着色。当我将鼠标悬停在我的区域上时,我可以看到它们位于正确的位置但颜色错误。而且我也不知道为什么代码为整个地图着色,而不仅仅是 geojson 文件中的区域。 here is an image of the output

新建(应该是正确的)geojson https://drive.google.com/file/d/1S03NX5Q0pqgAsbJnjqt8O5w8gUHH1rt_/view?usp=sharing

import json
import numpy as np
import pandas as pd
import plotly.express as px

df = pd.read_excel('kraje.xlsx', sheet_name='List1')

regions_json = json.load(open("KRAJE.geojson", "r"))
for feature in regions_json['features']:
    feature["id"] = feature["properties"]["K_KRAJ"]

fig = px.choropleth(df,
             locations="K_KRAJ",
             geojson=regions_json,
             color='OB1506')
fig.update_geos(fitbounds="locations", visible=False)
fig.show()

解决方案

多亏了 Rob Raymond,它终于成功了。 geojson 文件存在问题。我在安装 geopandas 时也遇到了很多问题,唯一有效的教程是分别安装每个包 ()

  • 您的 geojson 存在多个问题
    1. 需要定义CRS,显然不是epsg:4326。似乎是捷克共和国的 UTM CRS
    2. 即使这样也有无效的多边形
  • 使用有效的geojson,你错过了几点
    • locations 需要在您的数据框和 geojson
    • 中通用
    • featureidkey 需要用于定义您加入的名称
import json
import numpy as np
import pandas as pd
import plotly.express as px
import geopandas as gpd

files = {
    f.suffix: f
    for p in ["KRAJE*.*", "KRAJE*.*".lower()]
    for f in Path.home().joinpath("Downloads").glob(p)
}
# df = pd.read_excel('kraje.xlsx', sheet_name='List1')
df = pd.read_excel(files[".xlsx"], sheet_name="List1")

# regions_json = json.load(open("KRAJE.geojson", "r"))
regions_json = json.load(open(files[".geojson"], "r"))
regions_json = (
    gpd.read_file(files[".geojson"])
    .dropna()
    .set_crs("EPSG:32633", allow_override=True)
    .to_crs("epsg:4326")
    .__geo_interface__
)

fig = px.choropleth(
    df,
    locations="N_KRAJ",
    featureidkey="properties.name",
    geojson=regions_json,
    color="OB1506",
)
fig.update_geos(fitbounds="locations", visible=True)
fig

已更新

  • 您的 geojson 仍然存在问题。已使用 geopandasbuffer(0) 修复它(参见 Fix invalid polygon in Shapely
  • 有了这个并更改为 plotly 参数我现在可以生成一个图形
import json
import numpy as np
import pandas as pd
import plotly.express as px
import geopandas as gpd
from pathlib import Path

files = {
    f.suffix: f
    for p in ["KRAJ_*.*", "KRAJE*.*".lower()]
    for f in Path.home().joinpath("Downloads").glob(p)
}
# df = pd.read_excel('kraje.xlsx', sheet_name='List1')
df = pd.read_excel(files[".xlsx"], sheet_name="List1")

# regions_json = json.load(open("KRAJE.geojson", "r"))
regions_json = json.load(open(files[".json"], "r"))
# geometry is still invalid!!! force it to valid by buffer(0)
regions_json = gpd.read_file(files[".json"]).assign(geometry=lambda d: d["geometry"].buffer(0)).__geo_interface__

fig = px.choropleth(
    df,
    locations="K_KRAJ",
    featureidkey="properties.K_KRAJ",
    geojson=regions_json,
    color="OB1506",
)
fig.update_geos(fitbounds="locations", visible=True)
fig