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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:32:30