Choropleth 地图错误(在 python 中使用 plotly)使用 ONS GeoJSON 数据
Choropleth Map Error (using plotly in python) Using ONS GeoJSON data
我最近一直在研究使用 Python 在 plotly 上创建等值线图。我能够使用在互联网上找到的 GeoJSON 文件来执行此操作 (https://emilyshackleton1.carto.com/tables/uk_regions_map/public)
但是我随后进入了 ONS GeoPortal 并下载了一些 GeoJSON 文件,
然后我尝试以完全相同的方式创建一个等值线图,但它不起作用
代码:
import plotly.express as px
import pandas as pd
from urllib.request import urlopen
import json
with urlopen('https://opendata.arcgis.com/datasets/92ebeaf3caa8458ea467ec164baeefa4_0.geojson') as response:
ons2 = json.load(response)
area={}
for feature in ons2["features"]:
feature['id'] = feature["properties"]["objectid"]
area[feature["properties"]["ctry19nm"]] = feature["id"]
df3 = pd.DataFrame((['Wales',6.7],
['Scotland',4.6],
['England',4.7],
['Northern Ireland',4.1],
),columns='fips B'.split())
df3["id"]=df3["fips"].apply(lambda x: area[x])
fig = px.choropleth(df3, locations="id", geojson=ons2["features"][1], color="B", scope = "europe", hover_name="fips")
fig.update_geos(fitbounds="locations", visible=False)
fig.show()
For some reason it is coloring the whole space and only Northern Ireland is showing.
奇怪的是,如果我将鼠标悬停在这张地图上,它仍然会出现苏格兰、英格兰和威尔士,它们应该在什么地方
这让我发疯,希望得到任何帮助:)
我用其他 GeoJSON 文件测试了您的代码并且它有效。此外,您的 GeoJSON 文件没有任何错误,因此 plotly 库中可能存在错误。
作为替代方案,我可以推荐使用与 px.choropleth()
.
非常相似的 px.choropleth_mapbox()
函数
import plotly.express as px
import pandas as pd
from urllib.request import urlopen
import json
with urlopen('https://opendata.arcgis.com/datasets/92ebeaf3caa8458ea467ec164baeefa4_0.geojson') as response:
ons2 = json.load(response)
area={}
for feature in ons2["features"]:
feature['id'] = feature["properties"]["objectid"]
area[feature["properties"]["ctry19nm"]] = feature["id"]
df3 = pd.DataFrame((['Wales',6.7],
['Scotland',4.6],
['England',4.7],
['Northern Ireland',4.1],
),columns='fips B'.split())
df3["id"]=df3["fips"].apply(lambda x: area[x])
fig = px.choropleth_mapbox(df3, locations="id", featureidkey="properties.objectid", geojson=ons2, color="B", hover_name="fips", mapbox_style="white-bg", zoom=4, center = {"lat": 55, "lon": 0})
fig.show()
我最近一直在研究使用 Python 在 plotly 上创建等值线图。我能够使用在互联网上找到的 GeoJSON 文件来执行此操作 (https://emilyshackleton1.carto.com/tables/uk_regions_map/public)
但是我随后进入了 ONS GeoPortal 并下载了一些 GeoJSON 文件, 然后我尝试以完全相同的方式创建一个等值线图,但它不起作用
代码:
import plotly.express as px
import pandas as pd
from urllib.request import urlopen
import json
with urlopen('https://opendata.arcgis.com/datasets/92ebeaf3caa8458ea467ec164baeefa4_0.geojson') as response:
ons2 = json.load(response)
area={}
for feature in ons2["features"]:
feature['id'] = feature["properties"]["objectid"]
area[feature["properties"]["ctry19nm"]] = feature["id"]
df3 = pd.DataFrame((['Wales',6.7],
['Scotland',4.6],
['England',4.7],
['Northern Ireland',4.1],
),columns='fips B'.split())
df3["id"]=df3["fips"].apply(lambda x: area[x])
fig = px.choropleth(df3, locations="id", geojson=ons2["features"][1], color="B", scope = "europe", hover_name="fips")
fig.update_geos(fitbounds="locations", visible=False)
fig.show()
For some reason it is coloring the whole space and only Northern Ireland is showing.
奇怪的是,如果我将鼠标悬停在这张地图上,它仍然会出现苏格兰、英格兰和威尔士,它们应该在什么地方
这让我发疯,希望得到任何帮助:)
我用其他 GeoJSON 文件测试了您的代码并且它有效。此外,您的 GeoJSON 文件没有任何错误,因此 plotly 库中可能存在错误。
作为替代方案,我可以推荐使用与 px.choropleth()
.
px.choropleth_mapbox()
函数
import plotly.express as px
import pandas as pd
from urllib.request import urlopen
import json
with urlopen('https://opendata.arcgis.com/datasets/92ebeaf3caa8458ea467ec164baeefa4_0.geojson') as response:
ons2 = json.load(response)
area={}
for feature in ons2["features"]:
feature['id'] = feature["properties"]["objectid"]
area[feature["properties"]["ctry19nm"]] = feature["id"]
df3 = pd.DataFrame((['Wales',6.7],
['Scotland',4.6],
['England',4.7],
['Northern Ireland',4.1],
),columns='fips B'.split())
df3["id"]=df3["fips"].apply(lambda x: area[x])
fig = px.choropleth_mapbox(df3, locations="id", featureidkey="properties.objectid", geojson=ons2, color="B", hover_name="fips", mapbox_style="white-bg", zoom=4, center = {"lat": 55, "lon": 0})
fig.show()