Plotly Express绘制邮政编码地图遇运行无响应问题求助
问题描述
参考相关教程编写了如下代码,传入仅含25条数据的df_mover数据框(包含my_zip(object类型)和switcher_flag字段),在Jupyter Notebook中运行后一直无响应:
import plotly.express as px from urllib.request import urlopen import json with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response: counties = json.load(response) #import libraries import pandas as pd import plotly.express as px fig = px.choropleth(df_mover, geojson=counties, locations='my_zip', locationmode="USA-states", color='switcher_flag', range_color=(10000, 100000), scope="usa" ) fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0}) fig.show()
可能的原因及解决方法
- 地理标识完全不匹配:你加载的是县级别(FIPS编码)的GeoJSON,但
locationmode设为"USA-states",同时用my_zip(邮政编码)作为匹配字段,三者逻辑冲突。Plotly尝试匹配不兼容的地理数据时,会陷入无效计算导致无响应。- 解决:如果用邮政编码绘图,需更换为包含美国ZIP编码的GeoJSON;如果用现有县GeoJSON,要把
locations换成FIPS编码,locationmode改为"geojson-id"(对应GeoJSON里的id字段);如果要按州绘制,需将数据聚合到州级别,用州缩写/名称作为locations,locationmode设为"USA-states",同时替换为州级GeoJSON。
- 解决:如果用邮政编码绘图,需更换为包含美国ZIP编码的GeoJSON;如果用现有县GeoJSON,要把
- 数据类型不兼容:
my_zip是object类型,若GeoJSON中对应标识是数值类型,会导致匹配失败。检查GeoJSON的id字段类型,将my_zip转换为一致的类型(比如转成字符串或数值)。 - Jupyter渲染环境问题:Plotly的交互式渲染依赖特定扩展,可尝试:
- 用
fig.show(renderer="svg")或fig.show(renderer="png")生成静态图测试是否正常; - 安装并启用
ipywidgets:运行pip install ipywidgets后重启Notebook。
- 用
- 颜色范围设置不合理:
range_color设置为(10000, 100000),如果switcher_flag的实际值都不在这个区间内,可能引发渲染异常。先执行df_mover['switcher_flag'].describe()确认数据范围,调整range_color或直接去掉该参数让Plotly自动适配。
内容的提问来源于stack exchange,提问作者ASH
相关产品推荐
相关产品推荐

