plotly - plotly dash 更新条形图上的数据表数据单击
问题描述
我有一个 Plotly dash 条形图和数据表,我希望在单击其中一个条形图时更新数据表。
我目前正在读取 display_click_data() 中选定栏的点击数据,并使用该值过滤我想要更新数据表的数据框。问题是我不确定如何返回数据框并更新数据表。我是否需要一个单独的 update_table() 函数,或者我可以从 update_click_data() 函数中返回它并从中重新创建数据表?还是有更好的方法来做到这一点?
app = DjangoDash('SimpleExample')
df1 = get_spec_dataframe('security')
df_data = get_mostfrequent_data_all()
most_frequent_words = df_data[0][:30]
most_frequent_words_values = df_data[1][:30]
df = get_dataframe()
app.layout = html.Div([
dcc.Graph(
id='basic-interactions',
figure={
'data': [
{
'x': most_frequent_words,
'y': most_frequent_words_values,
'name': 'Trace 1',
'mode': 'markers',
'type': 'bar'
}
],
'layout': {
'clickmode': 'event+select'
}
}
),
html.Div(className='row', children=[
html.Div([
html.Pre(id='click-data'),
dash_table.DataTable(id='table',columns=[{"name": i, "id": i} for i in df.columns],data=df.to_dict('records')),
], className='three columns'),
])
])
@app.callback(
Output('click-data', 'children'),
[Input('basic-interactions', 'clickData')])
def display_click_data(clickData):
if clickData != None:
label = str(clickData['points'][0]['x'])
else:
label = "security"
df = get_spec_dataframe(label)
return (df)
解决方案
您可以尝试以下方法:
首先,您需要将您的定义html.Div
为空,以便将孩子作为表格传递:
html.Div(id='table')
然后将您的回调配置为输出表本身:
@app.callback(Output('table', 'children'), [Input('basic-interactions', 'clickData')])
def create_table(clickData):
if clickData != 'null':
table = dash_table.DataTable(columns=[{"name": i, "id": i} for i in df.columns],data=df['<filter df by clickData info>'].to_dict('records'))
else:
table = dash_table.DataTable(columns=[{"name": i, "id": i} for i in df.columns],data=df['<don't filter df>'].to_dict('records'))
return table
我推荐使用selectData
而不是clickData
,这样视觉输入(条的选择)对用户来说更直观,并且更容易“取消选择”
推荐阅读
- mysql - 将 csv 逗号分隔值作为多行导入表中
- outlook - 开发 Outlook 插件时请求外部 api
- javascript - 在 React js 中包装 props 组件
- arcgis - 如何以编程方式在 ArcObjects 10.3 for .net 中为表配置编辑器跟踪?
- python - 在python中返回具有最多唯一值的键的函数的问题
- python - 为什么训练准确率会波动?
- blazor - 检查是否所有子组件都被渲染
- sql - 在 Oracle SQL 中计算多列
- junit4 - 在 JUnitParams 中使用 @TestCaseName 和 @FileParameters
- javascript - PrintToPdf 特定帧