Plotly Python绘制美国Choropleth地图显示空白问题求助
解决Plotly美国州Choropleth地图空白问题
我来帮你排查代码里的问题,让你的枪支暴力数据地图正常显示:
问题分析
你的代码里有几个关键问题导致地图只显示空白轮廓:
- 缺少Pandas导入:你用了
pd.read_csv但没导入pandas,这会直接报错(如果没报错说明你实际运行时补了,但最好明确写出来)。 reset_index的错误用法:ans=ba.reset_index(inplace=True)这行里,inplace=True会原地修改ba,同时返回None,虽然你后续用的是ba,但这个写法容易混淆,而且可能导致意外的DataFrame结构问题。- 列名歧义:处理后的DataFrame里,计数列叫
state,和原数据集的state列同名,容易搞混,也可能让Plotly解析时出现隐性问题。
修正后的完整代码
# 导入必要库(补全Pandas) import os import pandas as pd import seaborn as sns from plotly.offline import init_notebook_mode, iplot import plotly.graph_objs as go # 初始化Plotly离线模式 init_notebook_mode(connected=True) # 读取数据集 print(os.listdir("../input")) df = pd.read_csv("../input/gun-violence-data_01-2013_03-2018.csv") # 统计各州事件数量并整理数据 state_counts = df['state'].value_counts().sort_values() # 转成DataFrame并重命名列,避免歧义 state_counts_df = pd.DataFrame(state_counts).reset_index() state_counts_df.rename(columns={'index': 'state_name', 'state': 'incident_count'}, inplace=True) # 构建Choropleth数据 data = [ dict( type='choropleth', autocolorscale=False, locations=state_counts_df['state_name'], # 州全称 z=state_counts_df['incident_count'], # 事件计数(数值型) locationmode='USA-states', text=state_counts_df['state_name'], # 悬停显示州名 colorscale='Viridis', colorbar=dict(title='事件数量') # 增加颜色条标题,更直观 ) ] # 布局设置 layout = dict( title='美国各州枪支暴力事件数量分布(2013-2018)', geo=dict( scope='usa', projection=dict(type='albers usa'), showlakes=True, lakecolor='rgb(135, 206, 250)' # 把湖的颜色改成更自然的浅蓝色,原粉色有点奇怪 ) ) # 生成并显示图表 fig = go.Figure(data=data, layout=layout) iplot(fig)
关键修改点说明
- 补全库导入:明确导入
pandas as pd,避免运行报错。 - 重命名列:把计数列改成
incident_count,州名列改成state_name,彻底避免列名混淆,代码可读性也更高。 - 移除无效赋值:去掉
ans=ba.reset_index(inplace=True)这种容易出错的写法,改用reset_index()返回新的DataFrame,再重命名列。 - 优化地图细节:增加颜色条标题,修改湖的颜色为更自然的浅蓝色,提升可视化效果。
这样修改后,你的地图应该就能正常显示各州的枪支暴力事件数量热力分布了。
内容的提问来源于stack exchange,提问作者Aravind




