Plotly choropleth地图按钮更新color_discrete_map及布局调整问题
Plotly Choropleth 问题修复方案
问题1:交互更新后颜色异常修复
故障原因
代码同时配置了互斥的color_continuous_scale(连续色阶)和color_discrete_map(离散颜色映射)参数,布尔类型的疫苗列被Plotly默认识别为数值型,优先调用连续色阶,导致设置的蓝/白离散映射完全失效。
修复步骤
- 移除
color_continuous_scale="spectral_r"参数,避免参数冲突 - 新增
color_discrete_sequence=None参数,强制Plotly触发离散颜色映射逻辑 - 可选:提前将数据中疫苗布尔列转为字符串类型,彻底避免类型识别偏差
问题2:下拉按钮顶部居中调整
在updatemenus配置项中新增x=0.5、xanchor="center"两个属性即可,x=0.5对应画布水平中点,xanchor设置按钮的锚点为中心,保证精准居中。可额外调整y参数控制按钮垂直位置,避免和标题重叠。
修正后完整代码
import plotly.express as px import plotly.graph_objects as go cols_dd = ["Johnson&Johnson","Sinopharm","Sputnik V","Moderna","AstraZeneca","Pfizer","Sinovac","Covaxin"] fig = go.Figure() for value in cols_dd: fig.add_traces( px.choropleth( df, locations="Iso code", # Spatial coordinates color=value, # Data to be color-coded hover_data={'Iso code':False}, # 移除冲突的连续色阶参数 # color_continuous_scale="spectral_r", color_discrete_sequence=None, # 新增参数强制启用离散映射 hover_name="Location", color_discrete_map={True: 'blue', False: 'white'}) .update_traces(visible= True if value==cols_dd[0] else False) .data ) fig.update_geos(scope="africa") fig.update_layout(showlegend=True, font=dict(size=12), width = 800, height = 650, margin=dict(l=0,r=0,b=0,t=70), title= "<b>Vaccination Brands and Statistics Across Africa</b>", updatemenus=[ { "x": 0.5, # 水平位置设为中点 "xanchor": "center", # 锚点设为按钮中心 "y": 1.1, # 可调整垂直位置避免和标题重叠 "buttons": [ { "label": value, "method": "update", "args": [ {"visible": [v2 == value for v2 in cols_dd]}, #{"title": f"<b>{value}</b>"}, ], } for value in cols_dd ] } ] ) fig.show()
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

