You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python地理可视化问题:JSON字符串转整数及key_on参数验证

英国城市地理可视化问题解决指南

一、处理JSON字符串格式问题

你手里的JSON是字符串类型,folium没法直接使用,得先转成Python可识别的字典/列表结构,用json模块就能搞定:

  • 先导入模块:import json
  • 如果数据是存在变量里的字符串,直接解析:country_geo = json.loads(你的JSON字符串变量)
  • 如果是从本地JSON文件读取,更建议用下面的方式:
import json
with open("gb-cities.json", "r", encoding="utf-8") as f:
    country_geo = json.load(f)

二、修正key_on参数

key_on的作用是关联你的DataFrame数据和JSON里的地理要素,必须和JSON中每个feature的属性名对应。

先查看你解析后的JSON结构,打印第一个feature看看属性:

print(country_geo["features"][0])

根据你用的英国城市数据结构,城市名一般存在feature.properties.city里,所以key_on应该设为'feature.properties.city',替换你现在的'feature.CopyPasteDiv'。

另外,你地图的初始坐标设错了,[20,78]是印度区域,改成英国大致坐标[54.5, -3]才能看到目标区域。

调整后的完整代码示例:

import folium
import json
import pandas as pd

# 读取并解析JSON数据
with open("gb-cities.json", "r", encoding="utf-8") as f:
    country_geo = json.load(f)

# 示例数据(替换成你的data_to_plot1)
data_to_plot1 = pd.DataFrame({"city": ["London", "Manchester"], "xg": [2.3, 1.8]})

# 初始化地图,聚焦英国
venue_map = folium.Map(location=[54.5, -3], zoom_start=5)

folium.Choropleth(
    geo_data=country_geo,
    data=data_to_plot1,
    columns=["city", "xg"],
    key_on='feature.properties.city',  # 匹配JSON中的城市属性
    fill_color='YlOrBr',
    fill_opacity=0.6,
    line_opacity=0.1,
    legend_name="Expected Goals per city"
).add_to(venue_map)

folium.LayerControl().add_to(venue_map)

venue_map

关键注意事项

  • 保证data_to_plot1里的city列和JSON中的城市名完全匹配(大小写、拼写都不能错),否则 Choropleth 无法关联数据。
  • 如果JSON里城市名的属性不是city,就把key_on改成对应的属性路径,比如feature.properties.name之类的。

内容的提问来源于stack exchange,提问作者Ashley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:37:25