1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| import dash import dash_cytoscape as cyto import dash_html_components as html import dash_core_components as dcc from dash.dependencies import Input, Output
app = dash.Dash(__name__)
nodes = [ { 'data': {'id': short, 'label': label}, 'position': {'x': 20*lat, 'y': -20*long} } for short, label, long, lat in ( ('la', 'Los Angeles', 34.03, -118.25), ('nyc', 'New York', 40.71, -74), ('to', 'Toronto', 43.65, -79.38), ('mtl', 'Montreal', 45.50, -73.57), ('van', 'Vancouver', 49.28, -123.12), ('chi', 'Chicago', 41.88, -87.63), ('bos', 'Boston', 42.36, -71.06), ('hou', 'Houston', 29.76, -95.37) ) ]
edges = [ {'data': {'source': source, 'target': target}} for source, target in ( ('van', 'la'), ('la', 'chi'), ('hou', 'chi'), ('to', 'mtl'), ('mtl', 'bos'), ('nyc', 'bos'), ('to', 'hou'), ('to', 'nyc'), ('la', 'nyc'), ('nyc', 'bos') ) ]
elements = nodes + edges
app.layout = html.Div([ dcc.Dropdown( id='dropdown-update-layout', value='grid', clearable=False, options=[ {'label': name.capitalize(), 'value': name} for name in ['grid', 'random', 'circle', 'cose', 'concentric'] ] ), cyto.Cytoscape( id='cytoscape-update-layout', layout={'name': 'grid'}, style={'width': '100%', 'height': '450px'}, elements=elements ) ])
@app.callback(Output('cytoscape-update-layout', 'layout'), Input('dropdown-update-layout', 'value')) def update_layout(layout): return { 'name': layout, 'animate': True }
if __name__ == '__main__': app.run_server(debug=True)
|