-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
121 lines (106 loc) · 3.4 KB
/
app.py
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import os
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
import pandas as pd
from dataframes import *
# default stationID
DEFAULT = '04LG004'
# setup and use user defined styles
external_stylesheets = [
'./assets/styles.css',
{
'href': 'https://use.fontawesome.com/releases/v5.8.1/css/all.css',
'rel': 'stylesheet',
'integrity': 'sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf',
'crossorigin': 'anonymous'
}
]
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
# this is needed for the Heroku deployment
server = app.server
# instantiate the layout using semantic HTML components provided by dash
app.layout = html.Div(children=[
html.Div(id='head',children=[
html.H2(children='Water Quantity Data'),
html.Div(children=[
html.Div(children=[
html.I(className="fas fa-user"),
html.Span(' Frank Basham')
]),
html.Div(children=[
html.I(className="fab fa-github"),
html.A(' GitHub',href='https://github.com/Fbasham/ECCC_ENG',target='_blank'),
])
])
]),
html.H3(id='stationName',children=f"STATION: {df_stations.at[DEFAULT,'StationName']}"),
html.Div([
dcc.Dropdown(
id='stationID',
options=[{'label': i, 'value': i} for i in df_stations.index],
value=DEFAULT
)
]
),
dcc.Graph(id='flow-graphic'),
dcc.Graph(id='level-graphic'),
])
# callbacks that define the logic upon changing the dropdown item (stationID)
@app.callback(
Output('flow-graphic', 'figure'),
Output('stationName', 'children'),
Input('stationID', 'value'))
def update_graph(station_ID=DEFAULT):
df = df_flows[df_flows['ID'] == station_ID]
station = df_stations.at[station_ID,'StationName']
dfh = df_historical_flows[df_historical_flows['ID'] == station_ID]
fig = go.Figure()
fig.add_trace(
go.Scatter(
x=dfh['Date'],
y=dfh['Flow(m³/s)'],
name='historical'
)
)
fig.add_trace(
go.Scatter(
x=df['Date'],
y=df['Flow (m3/s)'],
name='realtime'
)
)
fig.update_xaxes(title_text='Date')
fig.update_yaxes(title_text='Flow (m³/s)')
fig.update_layout(title='Discharge')
return fig, f"STATION: {station}"
@app.callback(
Output('level-graphic', 'figure'),
Input('stationID', 'value'))
def update_graph(station_ID=DEFAULT):
df = df_levels[df_levels['ID'] == station_ID]
dfh = df_historical_levels[df_historical_levels['ID'] == station_ID]
fig = go.Figure()
fig.add_trace(
go.Scatter(
x=dfh['Date'],
y=dfh['Level(m)'],
name='historical',
)
)
fig.add_trace(
go.Scatter(
x=df['Date'],
y=df['Level (m)'],
name='realtime'
)
)
fig.update_xaxes(title_text='Date')
fig.update_yaxes(title_text='Level (m)')
fig.update_layout(title='Stage')
return fig
# run the server
if __name__ == '__main__':
app.run_server(debug=True)