在Google Colab中用Dash创建交互式时间序列图报错求助
错误排查与解决方案
核心错误原因
你的代码中px.line()的参数逻辑完全错误:时间序列图需要以**日期(date)**为x轴、**销售额(sales)**为y轴,但你写的px.line(filtered_df, x='sales', y=year)里,year是下拉框传来的整数年份(而非DataFrame的列名),Plotly无法识别这个无效的y轴参数,进而触发NoneType相关报错。
修复后的完整代码
import pandas as pd from jupyter_dash import JupyterDash import dash_html_components as html import dash_core_components as dcc from plotly.express import line # 请确保此处已正确加载你的数据,示例: # df = pd.read_csv('your_sales_data.csv') df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d') df['year'] = df['date'].dt.year app = JupyterDash(__name__) app.layout = html.Div([ html.H4('Sales Over Time'), dcc.Graph(id='time-series-chart'), html.P('Select Year'), dcc.Dropdown( id='year', options=[{'label': year, 'value': year} for year in df['year'].unique()], value=df['year'].min(), clearable=False ) ]) @app.callback( Output('time-series-chart', 'figure'), Input('year', 'value') ) def update_line_chart(selected_year): filtered_df = df[df['year'] == selected_year] # 修正x/y轴参数,同时优化图表标题和标签 fig = line(filtered_df, x='date', y='sales', title=f'Sales Trend in {selected_year}', labels={'date': 'Date', 'sales': 'Sales Amount'}) return fig app.run_server(mode='inline')
额外优化提示
- 建议将回调函数的参数名从
year改为selected_year,避免与DataFrame的year列名混淆,提升代码可读性 - 确认你的
df包含有效的date和sales列,若df['year'].min()返回None,需检查数据加载是否正常
内容的提问来源于stack exchange,提问作者Humza Malik-Ramzan
相关产品推荐
相关产品推荐

