FS2023-dashboard-design/dashboard3/main.py

188 lines
8.2 KiB
Python
Raw Normal View History

import math
from dash import Dash, dcc, html, Input, Output
import plotly.express as px
import numpy as np
import pandas as pd
import dash_bootstrap_components as dbc
# new: plotly template="plotly_white", https://plotly.com/python/templates/
2023-05-12 16:16:05 +02:00
# Things done in here:
# 1: Copied first tab content into second
# 2: Changed IDs of everthing
# 3: changed plottypes for tab 2
# 4: Added the 3rd tab
app = Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])
df = pd.DataFrame(
{
"y": np.random.normal(loc=0, scale=10, size=1000),
"x": np.random.normal(loc=10, scale=2, size=1000),
}
)
app.layout = html.Div(
[
html.Div([html.H1("Dashboard 3")], className="header"),
html.Div(
[
dcc.Tabs(
id="tabs",
children=[
dcc.Tab(
label="Tab One",
id="tab_1_graphs",
children=[
html.Div(
[
dbc.Row(
[
dbc.Col(
[
dcc.Dropdown(
options=[
"red",
"green",
"blue",
],
value="red",
2023-05-12 16:16:05 +02:00
id="color_1",
multi=False,
)
],
width=6,
),
dbc.Col(
[
dcc.Slider(
min=math.floor(
df["y"].min()
),
max=math.ceil(
df["y"].max()
),
2023-05-12 16:16:05 +02:00
id="min_value_1",
)
],
width=6,
),
]
),
dbc.Row(
[
dbc.Col(
2023-05-12 16:16:05 +02:00
[dcc.Graph(id="graph_1_1")], width=6
),
dbc.Col(
2023-05-12 16:16:05 +02:00
[dcc.Graph(id="graph_1_2")], width=6
),
]
),
],
className="tab_content",
),
],
),
dcc.Tab(
label="Tab Two",
id="tab_2_graphs",
2023-05-12 16:16:05 +02:00
children=[html.Div([
dbc.Row(
[
dbc.Col(
[
dcc.Dropdown(
options=[
"red",
"green",
"blue",
],
value="red",
id="color_2",
multi=False,
)
],
width=6,
),
dbc.Col(
[
dcc.Slider(
min=math.floor(
df["y"].min()
),
max=math.ceil(
df["y"].max()
),
id="min_value_2",
)
],
width=6,
),
]
),
dbc.Row(
[
dbc.Col(
[dcc.Graph(id="graph_2_1")], width=6
),
dbc.Col(
[dcc.Graph(id="graph_2_2")], width=6
),
]
),
], className="tab_content")],
),dcc.Tab(
label="Tab Three",
id="tab_3_graphs",
children=[html.Div([html.Iframe(src="https://dashboard.m-g.tech", height="500px;", width="100%" )], className="tab_content")],
),
],
)
],
className="content",
),
]
)
2023-05-12 16:16:05 +02:00
@app.callback(Output("graph_1_1", "figure"), Input("color_1", "value"))
def update_graph_1_1(dropdown_value_color):
fig = px.histogram(df, x="y", color_discrete_sequence=[dropdown_value_color])
fig.update_layout(template="plotly_white")
return fig
2023-05-12 16:16:05 +02:00
@app.callback(Output("graph_1_2", "figure"), Input("min_value_1", "value"))
def update_graph_1_2(min_value):
if min_value:
dff = df[df["y"] > min_value]
else:
dff = df
fig = px.scatter(dff, x="x", y="y")
fig.update_layout(template="plotly_white")
return fig
2023-05-12 16:16:05 +02:00
@app.callback(Output("graph_2_1", "figure"), Input("color_2", "value"))
def update_graph_2_1(dropdown_value_color):
fig = px.box(df, x="y", color_discrete_sequence=[dropdown_value_color])
fig.update_layout(template="plotly_white")
return fig
@app.callback(Output("graph_2_2", "figure"), Input("min_value_2", "value"))
def update_graph_2_2(min_value):
if min_value:
dff = df[df["y"] > min_value]
else:
dff = df
fig = px.density_contour(dff, x="x", y="y")
fig.update_layout(template="plotly_white")
return fig
if __name__ == "__main__":
app.run_server(debug=True, port=8000)