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

Plotly Dash中add_trace生成折线图空白问题求助

排查Dash中add_trace绘制折线图空白的问题

刚看了你的Dash代码,发现第三个用add_trace生成的折线图一直空白,问题主要出在数据处理的逻辑错误和变量引用错误上,咱们一步步拆解修复:

核心问题分析

  1. 未定义变量引用:在summary_combined函数里,你写了df = qq[qq['country'] == country],但qq这个变量根本没定义!这会直接导致后续的df是空的,没有数据自然画不出图表。
  2. 累计值计算逻辑错误:你原本的累计值写法df['confirmed'] = df[df['type'] == 'confirmed']['cases'].cumsum()只会在type='confirmed'的行赋值,其他行都是NaN,即便用fillna(0)填充,拆分后的cdf/ddf/rdf里的total值也不符合预期,折线图的x/y轴数据不匹配,最终显示空白。

修正后的完整代码

把summary_combined函数替换成下面的版本,同时修正数据处理逻辑:

@app.callback(Output('third', 'figure'), [Input('country_drop', 'value')])
def summary_combined(country):
    # 先过滤当前选中国家的数据
    df = infection_type[infection_type['country'] == country].copy()
    # 按日期和类型分组,确保每天每种病例类型的数值是汇总后的结果
    df = df.groupby(['date', 'type'])['cases'].sum().reset_index()
    # 重塑数据结构:日期为索引,病例类型为列,方便后续计算累计值
    pivot_df = df.pivot(index='date', columns='type', values='cases').fillna(0)
    # 计算各类型病例的累计值
    pivot_df['confirmed'] = pivot_df['confirmed'].cumsum()
    pivot_df['death'] = pivot_df['death'].cumsum()
    pivot_df['recovered'] = pivot_df['recovered'].cumsum()
    # 可选:计算总累计值(如果需要在图表中展示的话)
    pivot_df['total'] = pivot_df['confirmed'] + pivot_df['death'] + pivot_df['recovered']
    
    # 创建图表并添加折线
    fig = go.Figure()
    fig.add_trace(go.Scatter(x=pivot_df.index, y=pivot_df['confirmed'], 
                             line=dict(color='royalblue', width=2), name='Confirmed'))
    fig.add_trace(go.Scatter(x=pivot_df.index, y=pivot_df['death'], 
                             line=dict(color='firebrick', width=2), name='Deaths'))
    fig.add_trace(go.Scatter(x=pivot_df.index, y=pivot_df['recovered'], 
                             line=dict(color='green', width=2), name='Recovered'))
    
    # 添加布局配置,让图表更清晰
    fig.update_layout(title=f'Cumulative Cases: {country}',
                      xaxis_title='Date',
                      yaxis_title='Total Cases')
    return fig

额外注意事项

  • 确认你的infection_type数据集里,type列的取值是'confirmed'、'death'、'recovered',如果有拼写错误(比如写成'deaths'),要同步修正代码里的筛选条件。
  • 调试时可以在函数里加print(pivot_df.head()),查看处理后的数据是否符合预期,快速定位数据为空或异常的问题。

内容的提问来源于stack exchange,提问作者10618890

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:18:15