Plotly实现下拉菜单切换双数据集:美国进出口贸易可视化问题求助
问题修正说明
你的代码核心问题出在按钮的restyle更新参数配置错误,具体修正点如下:
- 原代码中trace索引参数配置错误:需要同时更新索引为0的进口trace和索引为1的出口trace,原参数
args_f配置错误,修改为[0, 1]即可 - 原代码仅给进口trace配置了x轴年份数据,出口trace的x轴数据缺失,需要给两个trace分别传入对应的年份值
- 删除了折线图场景下无用的直方图配置、柱状图模式配置
修正后完整代码
import pandas as pd import plotly.express as px import plotly.graph_objects as go from plotly.subplots import make_subplots import gc # 原有数据处理逻辑保留 temp_imp = temp_imp.melt(id_vars=['Partner'], var_name="Year", value_name="Value") temp_exp = temp_exp.melt(id_vars=['Partner'], var_name="Year", value_name="Value") # 初始化默认trace逻辑保留 trace0 = px.line( data_frame = temp_imp[temp_imp['Partner']==temp_imp['Partner'].head(1).squeeze()], x='Year', y='Value' ).data[0] trace1 = px.line( data_frame = temp_exp[temp_exp['Partner']==temp_exp['Partner'].head(1).squeeze()], x='Year', y='Value' ).data[0] # 按钮逻辑修正 buttons = [] for country in temp_imp['Partner'].sort_values().unique(): imp_c = temp_imp[temp_imp['Partner']==country] exp_c = temp_exp[temp_exp['Partner'] == country] # x数组要对应两个trace的x值,y同理 args_x = [imp_c['Year'], exp_c['Year']] args_y = [imp_c['Value'], exp_c['Value']] # 要更新的trace索引为0和1 target_traces = [0, 1] buttons.append(dict( method='restyle', label=country, visible=True, args=[{'x': args_x, 'y': args_y}, target_traces] )) updatemenu=[dict( buttons=buttons, direction='down', pad={'r': 10, 't': 10}, showactive=True, x=-0.05, xanchor='left', y=1.1, yanchor='top' )] # 绘图逻辑保留 fig = make_subplots(specs=[[{"secondary_y": True}]]) fig.add_trace(trace0) fig.add_trace(trace1, secondary_y=True) # trace样式配置保留 fig.data[0].line.dash='dash' fig.data[0].mode ='markers+lines' fig.data[0].line.color='#00CC96' fig.update_layout(font_size=10) # 移除无用配置,保留有效布局配置 fig.update_layout( updatemenus=updatemenu, height=600, margin=dict(r=10, t=20, b=30, l=0), legend=dict( orientation='h', yanchor='top', y=0.33, xanchor='left', x=-0.05 ) ) gc.collect() fig.show()
内容的提问来源于stack exchange,提问作者sarah444
相关产品推荐
相关产品推荐

