You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:18:03