我目前使用Plotly Dash创建一个webapp来可视化数据。 语法涉及使用dcc.Graph呈现HTML Div,如下所示。 html.Div下面是渲染绘图的代码。 x轴和y轴值来自Pandas DF。 任何人都可以推荐一种方法来使用IF语句检查给定列是否存在,然后继续返回以下代码。 当一个'无花果时,Plotly Dash会出错。变量不存在
html.Div([
html.Div([
html.H3('Chart'),
dcc.Graph(id='Chart',figure = chart_fig
)
sensor3_trace_day1 = Scatter(
y = sensor_3_day1['BG Calibration (mg/dl)'],
x = sensor_3_day1['Current (nA)'],
mode = 'markers',
name = 'Sensor 3 Day 1'
)
data = [sensor1_trace]
layout = Layout(showlegend=True, height = 600, width = 600, title='Day 1: BG Cal vs Current',xaxis={'title':'Current [nA]'},yaxis={'title':'BG Calibration (mg/dl)'})
chart_fig = dict(data=data, layout=layout)
iplot(chart_fig)
答案 0 :(得分:1)
你可以做的是使用两个不同的@app.callbacks()
。第一个将返回一个数字,第二个将返回"样式" dcc.Graph()
对象的字典。如果数字是空的,你不想显示div。如果您有一个下拉列表或用于更新信息的按钮,即读入/创建数据帧,您可以将其用作回调的输入。例如:
html.Div([
html.Div([
html.H3('Chart'),
dcc.Graph(id='chart')
]),
])
@app.callback(Output('chart','figure'),
[Input('dropdown','value')])
def update_fig(drop_val):
if "col" in df.columns:
fig = {'data':data,'layout':layout}
else:
fig = {'data':[],'layout':layout}
return fig
@app.callback(Output('chart','style'),
[Input('dropdown','value')])
def update_style(drop_val):
if "col" in df.columns:
style = {'borderStyle':solid,'display':'inline-block'}
else:
style = {'display':'none'}
return style
在这种情况下,我有一些虚构的下拉列表可能会在读取df或其他内容之间翻转,然后每次输出显示和数字。无论如何构成,它必须返回一个可行的数字
data = [{'x':[1,2,4], 'y':[4,5,6], 'type':'bar'}]
或类似的东西,只需将显示设置为"none"
,这样就不会呈现。
答案 1 :(得分:0)
另一种可能的解决方案是在某些条件下创建回调并显示空图。 此示例与@lwileczek的示例非常相似
def empty_plot(label_annotation):
'''
Returns an empty plot with a centered text.
'''
trace1 = go.Scatter(
x=[],
y=[]
)
data = [trace1]
layout = go.Layout(
showlegend=False,
xaxis=dict(
autorange=True,
showgrid=False,
zeroline=False,
showline=False,
ticks='',
showticklabels=False
),
yaxis=dict(
autorange=True,
showgrid=False,
zeroline=False,
showline=False,
ticks='',
showticklabels=False
),
annotations=[
dict(
x=0,
y=0,
xref='x',
yref='y',
text=label_annotation,
showarrow=True,
arrowhead=7,
ax=0,
ay=0
)
]
)
fig = go.Figure(data=data, layout=layout)
# END
return fig
# Layout
html.Div([
html.Div([
# Here it goes the dropdown menu
# ....
# The graph is defined below
html.H3('Chart'),
dcc.Graph(id='chart')
]),
])
# Callback
@app.callback(Output('chart','figure'),
[Input('dropdown','value')])
def update_fig(drop_val):
if drop_val in df.columns:
# fig = (...) Here it goes your figure
else:
fig = empty_plot('Nothing to display') # Here it goes the empty plot
return fig