Plotly Choropleth地图添加日期滑块报sliders属性无效错误求助
故障修复说明
错误根因
- 核心
ValueError报错:你误将sliders参数嵌套到了geo配置字典中,sliders是Plotly布局的一级配置项,不属于地理图层(geo)的可配置属性,这是报错直接诱因。 SettingWithCopyWarning警告:你对筛选出的df_segmented直接修改列值,pandas判定该操作是在数据切片的副本上执行,存在修改不生效的潜在风险。
修正后代码
import plotly.graph_objs as go import plotly.offline as offline import pandas as pd # 颜色配置 scl = [[0.0, '#ffffff'],[0.2, '#ff9999'],[0.4, '#ff4d4d'], [0.6, '#ff1a1a'],[0.8, '#cc0000'],[1.0, '#4d0000']] data_slider = [] for year in df_total['Year'].unique(): # 筛选后加copy()解决SettingWithCopyWarning df_segmented = df_total[(df_total['Year']== year)].copy() for col in df_segmented.columns: df_segmented[col] = df_segmented[col].astype(str) data_each_yr = dict( type='choropleth', locations = df_segmented['Entity'], z=df_segmented['Total Deaths'].astype(float), locationmode= 'country names', colorscale = scl, colorbar= {'title':'# Deaths - Total Air pollution Deaths'}) data_slider.append(data_each_yr) steps = [] for i in range(len(data_slider)): step = dict(method='restyle', args=['visible', [False] * len(data_slider)], label='Year {}'.format(i + 1990)) step['args'][1][i] = True steps.append(step) sliders = [dict(active=0, pad={"t": 1}, steps=steps)] # 修正:sliders提到layout一级配置,不再放在geo内部 layout = dict( title ='Global Air Pollution Deaths 1990-2020', geo=dict( showframe=False, showcoastlines=False, projection_type='equirectangular' ), sliders=sliders ) fig = dict(data=data_slider, layout=layout) offline.iplot(fig)
关键修改点
- 筛选
df_segmented时添加.copy(),消除副本修改警告 - 将
sliders配置从geo字典中移出,作为layout的一级属性传入
内容的提问来源于stack exchange,提问作者JamesArthur
相关产品推荐
相关产品推荐

