嵌套用于xaxis yaxis循环的plot-dash图

时间:2018-11-22 09:44:46

标签: nested-loops figure plotly-dash

使用plotly-破折号,我想创建一个绘图,其中x轴将是通过列表元素循环的结果,对于每个x值,y轴将是通过列表元素循环的结果嵌套在上一个代码中。这里是代码,在其中放置了2个for循环,以显示我要执行的操作:

import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go

datast = {
    'items': {
        '01': {
            'time': 2,
            'serial_no': 'unit_1',
            'data': {
                'expedition': 'Antarctic',
                'devices':{
                    'battery': {
                        'life': 100,
                        'error': 5
                    },
                    'engine': {
                        'life': 200,
                        'error': 8
                    },
                    'rudder': {
                        'life': 50,
                        'error': 15
                    }
                }
            }
        },
        '02': {
            'time': 5,
            'serial_no': 'unit_7',
            'data': {
                'expedition': 'Pacific',
                'devices': {
                    'battery': {
                        'life': 150,
                        'error': 3
                    },
                    'engine': {
                        'life': 250,
                        'error': 7
                    },
                    'rudder':{
                        'life': 90,
                        'error': 12
                    }
                }
            }
        }
    },
    'author': 'blue',
    'amount': 1500
}

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']


app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div([
    dcc.Graph(
            id='errors-plot',
            figure={
                'data': [go.Scatter(
                    x=(datast[datast['items'][j]['data']['devices'] == i]['items'][j]['time']),
                    y=datast[datast['items'][j]['data']['devices'] == i]['items'][j]['data']['devices'][i]['error'],
                    mode='markers',
                    name='errors',
                    text=i
                    ) for j,i in datast['items'], datast[j]['data']['devices']
                    ],
                'layout': go.Layout(
                    title='Devices Software Messages',
                    xaxis={'title': 'Time'},
                    yaxis={'title': 'Number of messages'},
                    margin={'l': 100, 'b': 40, 't': 10, 'r': 50},
                    legend={'x': 0, 'y': 1},
                    hovermode='closest')
            }
    )
])

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

0 个答案:

没有答案