【发布时间】:2021-06-17 00:55:43
【问题描述】:
我已经实现了一个实时更新数据表来对应一个实时更新图。从功能上讲,两者都工作得很好。我在过滤数据表以包含某些列并排除其他列时遇到问题。例如。如果图表针对某个 x 值(09:00-10:00)放大,有什么方法可以裁剪相应的数据表以表示来自该相同值的列?也许添加一个带有删除特定列 ID 的回调的按钮?有没有办法在不使用 GUI 的情况下通过 python 删除特定的“列”“id”输入?截至目前,我只能手动删除单个列,考虑到列的数量,这非常乏味。谢谢你。我希望这个问题不要太开放。
table_contents = ['Propofol/Remi @ 6.5 ug/ml', 'Fentanyl (ug)', 'Propofol (mg)', 'Remi (ug)',
'Ketorolac (mg)']
html.Div([dash_table.DataTable(
id='editing-columns',
columns=[{
'name': 'Parameter',
'id': 'column1',
'deletable': True,
'renamable': True
}],
data=[
{'column1': j}
for j in table_contents
],
editable=True,
)]),
# The callback stores the previous length of the csv file in dcc.store and appends new columns if new csv data uploaded
@app.callback(Output('editing-columns', 'columns'),
[Input('graph-update', 'n_intervals')],
[State('editing-columns', 'columns')],
[State('mystore', 'data')])
def update_columns(n, btn, existing_columns, data):
with open('temp.csv', 'r') as rf:
reader = csv.reader(rf)
for a in reader:
existing_columns.append({
'id': a[3], 'name': a[3],
'renamable': True, 'deletable': True
})
return existing_columns, html.Div('Program running')
else:
check_length = []
de_serialized = json.loads(data)
with open('temp.csv', 'r') as rf:
reader = csv.reader(rf)
for a in reader:
check_length.append(a[3])
if len(check_length) == 0:
return existing_columns, html.Div('Program running')
elif len(check_length) > len(de_serialized):
existing_columns.append({
'id': check_length[-1], 'name': check_length[-1],
'renamable': True, 'deletable': True
})
return existing_columns, html.Div('Program running')
else:
return existing_columns, html.Div('Program running')
#The graph is a bar and scatter graph that is updated with x,y values derived from the same csv as the datatable.
@app.callback(
dash.dependencies.Output('live-graph', 'figure'),
[dash.dependencies.Input('graph-update-BP', 'n_intervals')],
)
def update_graph_scatter_1(btn, n):
trace = []
trace2 = []
blood_pressure = []
hr = []
with open('temp.csv', 'r') as rf:
reader_2 = csv.reader(rf)
for a in reader_2:
blood_pressure.append(eval(a[4]))
time.append(a[3])
for i in range(0, len(blood_pressure)):
trace.append(go.Box(y=blood_pressure[i],
x=triple_time[i],
line=dict(color='#6a92ff'),
hoverinfo='all'))
for a in range(0, len(hr)):
trace2.append(go.Scatter(y=coated_hr[a],
x=coated_time[a],
name='HR',
【问题讨论】:
-
您介意分享一些有关如何创建绘图和数据表的代码吗?
-
我编辑了一些代码。它是一个基本的可编辑数据表,我对其进行了修改,以便在上传新的 csv 数据时添加一列。该图是一个实时更新的基本条形图和散点图,基于与数据表相同的 csv。图的x值对应于数据表的列id。Thx
标签: plotly-dash