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

如何修改Dash代码实现RadioItems回调更新max_deviations参数

代码修改方案

现有代码共4处核心问题,按如下规则修改即可实现RadioItems阈值联动、动态更新异常值过滤规则:

  • 给实际的dcc.RadioItems组件添加id="radio_items"属性,删除多余的空占位<div id="radio_items">,否则回调无法捕获单选框的选中值。
  • 删除回调函数中绘图代码前的return (dff)语句,该语句会导致后续绘图逻辑成为永远不会执行的死代码。
  • 修正回调返回值:回调绑定的输出是图表组件的figure属性,直接返回plotly生成的图表对象即可,不需要返回DataFrame,也不需要返回dcc.Graph组件。
  • 简化异常值过滤逻辑:由于距离均值的偏差序列和原DataFrame索引完全对齐,直接用布尔索引过滤原DataFrame即可,无需做表合并,避免出现列名带_y后缀的问题。

修正后完整代码

import dash
import plotly.express as px
from dash import Dash, dcc, html, Input, Output
import pandas as pd
import numpy as np

app = dash.Dash(__name__)
server = app.server

df=pd.read_csv(r'C:\SVS_GIS\POWER BI\CSV_DATA\QSAS2021.csv', encoding='unicode_escape')

#SET DATE OF VALUATION
df['TIME'] = ((pd.to_datetime(df['Sale Date'], dayfirst=True)
             .rsub(pd.to_datetime('01/10/2021', dayfirst=True))
             .dt.days
          )*-1)

df=df[df['TIME'] >= -365]
df = df.query("(SMA >=1 and SMA <= 3) and (LGA==60)")

# 预计算全量数据的均值、标准差、与均值的距离,这部分不需要随回调重复计算
y = df.CHANGE
mean = np.mean(y)
standard_deviation = np.std(y)
distance_from_mean = abs(y - mean)

# 应用布局定义
app.layout = html.Div([
    html.Label("Standard Deviation Picker:", style={'fontSize':25, 'textAlign':'center'}),
    html.Br(),
    html.Label("1.0 = 68%, 2.0 = 95%, 3.0 = 99.7%", style={'fontSize':15, 'textAlign':'center'}),
    # 给单选框绑定对应id,删除原来的空占位div
    dcc.RadioItems(
        id="radio_items",
        options=[{'label': i, 'value': i} for i in [1.0, 2.0, 3.0]],
        value=2.0
    ),
    html.Div([
        dcc.Graph(id="the_graph")
    ])
])

# 回调函数定义
@app.callback(
    Output("the_graph", "figure"),
    Input("radio_items", 'value')
)
def update_graph(max_deviations):
    # 直接用布尔索引过滤非异常值,无需merge
    not_outlier = distance_from_mean < max_deviations * standard_deviation
    dff = df[not_outlier]
    
    fig = px.scatter(
        dff, x='TIME', y='CHANGE',
        color='SMA',
        trendline='ols',
        size='PV',
        height=500,
        width=800,
        hover_name='SMA',
    )
    return fig

if __name__ == '__main__':
    app.run_server(debug=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:39:19