使用Plotly Dash生成图表时遭遇SchemaTypeValidationError问题求助
解决Dash回调的SchemaTypeValidationError问题
我一眼就看出你遇到了两个关键问题,咱们一步步解决:
问题1:回调返回值类型不匹配
你的回调函数定义了多个Output(哪怕只有一个,用[]包裹就表示要返回列表/元组类型),但你直接返回了单个Scatter对象。Dash要求返回值必须和Output的结构严格一致——哪怕只有一个返回结果,也要用列表或元组包裹起来。
问题2:混淆了Plotly Trace和Figure对象
dcc.Graph的figure属性需要的是go.Figure对象(这是整个图表的容器),而你直接返回了单个go.Scatter(这只是图表里的一条线/点,属于trace级别的对象),这完全不符合组件的要求。
修改后的完整代码
把这两个问题都修复后的回调代码如下:
@app.callback( [ Output("selected-plot", "figure") ], [ Input("submit-selected-plotting", "n_clicks"), State("table", "data") ], ) def plot(button_clicked, data): # 注意:table的data通常是字典组成的列表,需要提取对应字段的数值列表 x_values = [item["index"] for item in data] y_values = [item["result"] for item in data] # 创建完整的Figure对象,把Scatter trace放入其中 fig = go.Figure( data=[go.Scatter(x=x_values, y=y_values, mode='lines', name='result')] ) # 返回列表形式的结果,匹配Output的结构要求 return [fig]
另外要注意:你的布局代码里Graph的id是selected-plot,和回调里的Output id要保持完全一致(错误信息里出现了selected-plots,如果是笔误的话记得修正)。
额外小提示
- 如果你的回调只有一个Output,也可以把Output的
[]去掉,写成Output("selected-plot", "figure"),此时直接返回单个fig即可,但用列表的方式更灵活,方便后续添加更多Output。 - 确认
table的data结构是否正确:如果你的表格数据不是字典列表格式,那提取x/y值的方式要对应调整,比如如果是从pandas DataFrame转换来的,那当前的提取方式是没问题的。
内容的提问来源于stack exchange,提问作者Emiliyan Pavlov
相关产品推荐
相关产品推荐

