我有一个与下面类似的数据集。请注意,一个ID有多个值。
import pandas as pd
import numpy as np
import random
df = pd.DataFrame({'DATE_TIME':pd.date_range('2022-11-01', '2022-11-05 23:00:00',freq='h'),
'SBP':[random.uniform(110, 160) for n in range(120)],
'DBP':[random.uniform(60, 100) for n in range(120)],
'ID':[random.randrange(1, 100) for n in range(120)],
'TIMEINTERVAL':[random.randrange(1, 200) for n in range(120)]})
df['VISIT'] = df['DATE_TIME'].dt.day
df['MODE'] = np.select([df['VISIT']==1, df['VISIT'].isin([2,3])], ['CKD', 'Dialysis'], 'Late TPL')我想使用Dash,这样我就可以先选择ID,然后绘制出所选ID的图,此外,我还做了一个滑块,以分钟来选择测量之间的时间间隔。
我的问题是我不能同时实现滑块和在Dash中选择ID。如何将以下函数集成到我的Dash代码中?或者,我如何选择ID拳头,然后用它来制作情节呢?
# function to choose ID
def choose_id(dataframe_name, id_number):
return dataframe_name[dataframe_name['ID']==id_number]
#patient = choose_id(df, 9)我使用以下破折号代码来制作滑块:
app = Dash(__name__)
app.layout = html.Div([
html.H4('Interactive Scatter Plot with ABPM dataset'),
dcc.Graph(id="scatter-plot"),
html.P("Filter by time interval:"),
dcc.Dropdown(df.ID.unique(), id='pandas-dropdown-1'), # for choosing ID,
dcc.RangeSlider(
id='range-slider',
min=0, max=600, step=10,
marks={0: '0', 50: '50', 100: '100', 150: '150', 200: '200', 250: '250', 300: '300', 350: '350', 400: '400', 450: '450', 500: '500', 550: '550', 600: '600'},
value=[0, 600]
),
html.Div(id='dd-output-container')
])
@app.callback(
Output("dd-output-container", "children"),
Output("scatter-plot", "figure"),
Input("pandas-dropdown-1", "value"),
Input("range-slider", "value"))
def update_bar_chart(value,slider_range):
patient = choose_patient(df, value)
df = patient
low, high = slider_range
mask = (df['TIMEINTERVAL'] > low) & (df['TIMEINTERVAL'] < high)
fig = px.scatter(
df[mask], x="DATE_TIME", y=["SBP","DBP"],
hover_data=['TIMEINTERVAL'],facet_col='VISIT',
facet_col_wrap=2,
symbol='MODE')
fig.update_xaxes(matches=None,
showticklabels=True)
return fig
app.run_server(debug=True)我得到了错误跟踪(最近一次调用):
"C:\Users\oezmenma\dashv1\dash2_choose_patient.py",文件
第63行,在update_bar_chart掩码=(df‘’TIMEINTERVAL‘>低)和(df’‘TIMEINTERVAL’<) TypeError:'int‘对象不可订阅
任何帮助都是非常感谢的。
发布于 2022-11-08 17:12:20
您可以查看下面的更正版本,我修复了多个问题。
app = Dash(__name__)
app.layout = html.Div([
html.H4('Interactive Scatter Plot with ABPM dataset'),
dcc.Graph(id="scatter-plot"),
html.P("Filter by time interval:"),
dcc.Dropdown(df.ID.unique(), id='pandas-dropdown-1'), # for choosing ID,
dcc.RangeSlider(
id='range-slider',
min=0, max=600, step=10,
marks={0: '0', 50: '50', 100: '100', 150: '150', 200: '200', 250: '250', 300: '300', 350: '350', 400: '400', 450: '450', 500: '500', 550: '550', 600: '600'},
value=[0, 600]
),
html.Div(id='dd-output-container')
])
@app.callback(
Output("scatter-plot", "figure"),
Input("pandas-dropdown-1", "value"),
Input("range-slider", "value"),
prevent_initial_call=True)
def update_bar_chart(value,slider_range):
low, high = slider_range
df1 = df.query("ID == @value & TIMEINTERVAL > @low & TIMEINTERVAL < @high").copy()
if df1.shape[0] != 0:
fig = px.scatter(df1, x="DATE_TIME", y=["SBP","DBP"],
hover_data=['TIMEINTERVAL'],facet_col='VISIT',
facet_col_wrap=2,
symbol='MODE')
fig.update_xaxes(matches= None, showticklabels=True)
return fig
else:
return dash.no_update
app.run_server(debug=True, use_reloader=False)输出:

https://stackoverflow.com/questions/74362661
复制相似问题