1

我目前使用 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)
4

2 回答 2

2

另一种可能的解决方案是在某些条件下创建回调并显示一个空图。这个例子与@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
于 2018-11-06T16:22:20.523 回答
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"这样它就不会被渲染。

于 2018-02-07T16:02:35.633 回答