在 plotly dash 中使用数据框的列作为 y 值

问题描述 投票:0回答:1

我想使用数据框的一些(但不是全部)列(

['V+', 'V-', 'I_tube', 'I_heat']
)来绘制
'time'
。当我像
y = I_heat
这样对列进行硬编码时,它就可以工作,但是我不知道如何使其具有反应性,以便 y 会根据用户行为而改变。 到目前为止,我得到了:

    from dash import Dash, dcc, html, Input, Output

app = Dash(__name__)

app.layout = html.Div([
    html.H4('Dauertest'),
    dcc.Graph(id="graph"),
    dcc.Checklist(
        id="devices",
        options = all_df['Device'].value_counts().index,
        value = all_df['Device'].value_counts().index[1],
        inline=True
    ),
    html.Br(),
    dcc.Checklist(
        id="signals",
        options = ['V+', 'V-', 'I_tube', 'I_heat'],
        value = ['V+'],
        inline=True
    ),
])


@app.callback(
    Output("graph", "figure"), 
    Input("devices", "value"),
    Input("signals", "value"))
def update_line_chart(devices, signals):
    df = all_df # replace with your own data source
    mask = df.Device.isin(devices)
    fig = px.line(df[mask]
                  , x = "time"
                  , y = "I_heat"
                  , color = 'Device'
                  )
    
    return fig


app.run_server(
               # debug=True
              )

我也想对

device
做同样的事情(将数据框子设置为
device
的某些分类级别)但我想这很相似(?)。

plotly plotly-dash
1个回答
1
投票

目前在你编写的剧情代码中

y = all_df.columns == signals['value']
.

这将返回一个长度与包含布尔值的列数相同的数组,该布尔值指示列名是否与

signal['value']
中的内容匹配。
例如。如果您的列是
['time', 'V+', 'V-', 'I_tube', 'I_heat']
signals['value'] = 'V+'
,则
all_df.columns == signals['value']
的结果是
array([False, True, False, False, False])

但是,

y
参数需要一个(列表)列名称。所以你需要写
y=signals['value']
,因为这会将所选列的名称作为字符串传递。

对于

device
,问题是相同的,从某种意义上说,您没有提供
px.line
期望的论据。只提供具有特定
device
级别的数据框行,写
df[df.Device == devices['value']]
.

鉴于您遇到的问题,我建议阅读plotly API参考pandas索引手册

© www.soinside.com 2019 - 2024. All rights reserved.