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
相关产品推荐
相关产品推荐

