Plotly Dash中add_trace生成折线图空白问题求助
排查Dash中add_trace绘制折线图空白的问题
刚看了你的Dash代码,发现第三个用add_trace生成的折线图一直空白,问题主要出在数据处理的逻辑错误和变量引用错误上,咱们一步步拆解修复:
核心问题分析
- 未定义变量引用:在
summary_combined函数里,你写了df = qq[qq['country'] == country],但qq这个变量根本没定义!这会直接导致后续的df是空的,没有数据自然画不出图表。 - 累计值计算逻辑错误:你原本的累计值写法
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
相关产品推荐
相关产品推荐

