微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

向用户发出丢失数据的信号

如何解决向用户发出丢失数据的信号

我有一个折线图,用户可以在其中选择 x 范围。然后回调从数据库请求给定 x 范围的数据并显示它。

但是,可能没有选择的x范围的任何数据,导致图表为空,看起来有点笨拙。向用户表明所选 x 范围没有数据的好方法是什么?

这是我放在一起的一个小例子。通过在图形上拖动选择来选择 4 到 11(不包括)之间的某个 x 范围将导致一个空图形。

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input,Output
import plotly.graph_objects as go

app = dash.Dash()
app.layout = html.Div([dcc.Graph(id='my-graph'),dcc.Store(id='my-data')])

@app.callback(Output('my-data','data'),Input('my-graph','relayoutData'),)
def update_data(relayout_data):
    start,end = 1,14
    if isinstance(relayout_data,dict):
        if 'xaxis.range[0]' in relayout_data and 'xaxis.range[1]' in relayout_data:
            start = relayout_data['xaxis.range[0]']
            end   = relayout_data['xaxis.range[1]']
    return pull_data(start,end)

def pull_data(start,end): # imagine this being a DB request or similar
    x = [1,2,3,4,11,12,13,14]
    x = [i for i in x if start <= i <= end]
    y = [i**2 for i in x]
    return [x,y]

@app.callback(Output('my-graph','figure'),Input('my-data',)
def update_graph(data):
    print("selected data:",data)
    x,y = data
    fig = go.figure(data=go.Scatter(x=x,y=y))
    fig.update_yaxes(fixedrange=True)
    if not x:
        pass # what Could I do here?
    return fig

if __name__ == '__main__':
    app.run_server(debug=True)

解决方法

我现在找到的一种方法是添加一个非常明显的注释来通知用户丢失的数据,如下所示:

if not x:
    fig.add_annotation(text='No data in chosen x range',xref='paper',yref='paper',x=0.5,y=0.5,showarrow=False,font=dict(size=24),bgcolor="rgba(255,127,14,0.5)",)

确切位置(xy)、font sizebgcolor 当然可以调整。还可以使用 visiblefig.add_annotation 参数进行进一步控制。

问题中选择的示例仍然有点笨拙,因为 x 轴范围不会准确,但至少告诉用户发生了什么。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。