adicion de controles a gráfica de series

es la gráfica conjunta de bullets y scatter para apreciar la cobertura.
parent fb997d2e
...@@ -8,61 +8,7 @@ import numpy as np ...@@ -8,61 +8,7 @@ import numpy as np
import flask import flask
import test_ch_2_b import test_ch_2_b
def update_cobertura_series(etapaSel=1, min_comidas=10, min_glucosa=7):
gauges = {
'shape': "bullet",
'axis': {'range': [None, 100]},
'steps': [
{'range': [0, 25], 'color': "lightcyan"},
{'range': [25, 50], 'color': "lightblue"},
{'range': [50, 75], 'color': "skyblue"},
{'range': [75, 100], 'color': "steelblue"}],
'bar': {'color': "blue"},
}
numbers = { 'suffix':'%', 'valueformat':'.2f'}
modes = "number+gauge"
comidas_data = resumen_comidas.loc[(slice(None),f'e{etapaSel}')] > min_comidas
glucosa_data = glucometro_df.loc[glucometro_df["visit_id"] == etapaSel, "amount_of_days"] > min_glucosa
microbiota_data = num_secuencias[etapaSel-1]
glucosa_scatter = glucometro_df.loc[glucometro_df["visit_id"] == etapaSel]["amount_of_days"].sort_values()
glucosa_scatter.index = glucosa_scatter.index.astype(str)
# microbiota_data = visitas_datos[etapaSel-1]["muestra"].count()
# La N de la etapa debe ser el número de participantes que cumplieron la etapa.
# esto es diferente al número de participantes que asistieron a la visita N o N+1.
N_etapa = len(participantes.loc[participantes["finished_periods"].isin(range(etapaSel, 4))].index)
multi = make_subplots(rows=2, cols=1, specs=[[{"type":"indicator"}],[{}]])
multi.add_trace(go.Indicator(
value = 100 * comidas_data.sum() / N_etapa,
domain = {'x': [0.25, 1], 'y': [0.70, 0.8]},
title = {'text': "Comidas"},
mode = modes,
number = numbers,
gauge = gauges,
))
multi.add_trace(go.Indicator(
value = 100 * glucosa_data.sum() / N_etapa,
domain = {'x': [0.25, 1], 'y': [0.9, 1.0]},
title = {'text': "Glucómetro"},
mode = modes,
number = numbers,
gauge = gauges
))
multi.add_trace(go.Indicator(
value = 100 * microbiota_data / N_etapa,
domain = {'x': [0.25, 1], 'y': [0.5, 0.6]},
title = {'text': "Microbiota"},
mode = modes,
number = numbers,
gauge = gauges
))
multi.add_trace(
go.Scatter(x=glucosa_scatter.index, y=glucosa_scatter)
)
return multi
def get_visit_data(visitnumber): def get_visit_data(visitnumber):
url_visitas = url + "/visits/" + str(visitnumber) + "/patients-data" url_visitas = url + "/visits/" + str(visitnumber) + "/patients-data"
...@@ -150,7 +96,6 @@ app = Dash(__name__, external_stylesheets=external_stylesheets, server=server, u ...@@ -150,7 +96,6 @@ app = Dash(__name__, external_stylesheets=external_stylesheets, server=server, u
app.title = "NutrINDmex. Inventario de datos" app.title = "NutrINDmex. Inventario de datos"
app.layout = html.Div(children=[ app.layout = html.Div(children=[
html.Div(children=[dcc.Graph(figure=update_cobertura_series())], className="wrapper"),
#encabezado #encabezado
html.Div(children=[ html.Div(children=[
html.P(children="🥑", className="header-emoji"), html.P(children="🥑", className="header-emoji"),
...@@ -165,6 +110,45 @@ app.layout = html.Div(children=[ ...@@ -165,6 +110,45 @@ app.layout = html.Div(children=[
dcc.Graph(figure=tres_pies) dcc.Graph(figure=tres_pies)
], className="wrapper"), ], className="wrapper"),
], className="wrapper"), ], className="wrapper"),
# cobertura por fuente de datos, working
html.Div(children=[ html.H1("Cobertura de pacientes por fuente de datos", className="header-title2") ]),
# dos columnas: controles y gráfica de pacientes por fuente de datos
html.Div(children=[
#controles
html.Div(children=[
html.Div(children="Etapa", className="menu-title"),
dcc.Dropdown(
id="etapas_serie",
options=[
{"label":1, "value":1},
{"label":2, "value":2},
{"label":3, "value":3},
],
value=1,
clearable=False,
searchable=False,
className="dropdown",
),
html.Div(children="Comidas", className="menu-title"),
dcc.Slider(
id="min_comidas_serie",
min=1,
max=Comidas_totales_e,
value=15,
marks={1:"1",15:"15", 21:"21",30:"30",42:"42", Comidas_totales_e:str(Comidas_totales_e)}
),
html.Div(children="Días con glucómetro", className="menu-title"),
dcc.Slider(
id="min_glucosa_serie",
min=1,
max=Glucometro_e,
value=7,
marks={1:"1", 7:"7", 14:"14", 28:"28", 42:"+42"}
),
]),
#gráfica
html.Div(children=[dcc.Graph(id="cover_series")],)
],style={'display': 'flex', 'flexDirection': 'row'}, className="wrapper"),
# cobertura por fuente de datos # cobertura por fuente de datos
html.Div(children=[ html.H1("Cobertura de pacientes por fuente de datos", className="header-title2") ]), html.Div(children=[ html.H1("Cobertura de pacientes por fuente de datos", className="header-title2") ]),
# dos columnas: controles y gráfica de pacientes por fuente de datos # dos columnas: controles y gráfica de pacientes por fuente de datos
...@@ -269,6 +253,68 @@ app.layout = html.Div(children=[ ...@@ -269,6 +253,68 @@ app.layout = html.Div(children=[
]) # cierre del layout ]) # cierre del layout
@app.callback( @app.callback(
Output("cover_series", "figure"),
Input("etapas_serie","value"),
Input("min_comidas_serie", "value"),
Input("min_glucosa_serie", "value")
)
def update_cobertura_series(etapaSel=1, min_comidas=10, min_glucosa=7):
gauges = {
'shape': "bullet",
'axis': {'range': [None, 100]},
'steps': [
{'range': [0, 25], 'color': "lightcyan"},
{'range': [25, 50], 'color': "lightblue"},
{'range': [50, 75], 'color': "skyblue"},
{'range': [75, 100], 'color': "steelblue"}],
'bar': {'color': "blue"},
}
numbers = { 'suffix':'%', 'valueformat':'.2f'}
modes = "number+gauge"
comidas_data = resumen_comidas.loc[(slice(None),f'e{etapaSel}')] > min_comidas
glucosa_data = glucometro_df.loc[glucometro_df["visit_id"] == etapaSel, "amount_of_days"] > min_glucosa
microbiota_data = num_secuencias[etapaSel-1]
glucosa_scatter = glucometro_df.loc[glucometro_df["visit_id"] == etapaSel]["amount_of_days"].sort_values()
glucosa_scatter.index = glucosa_scatter.index.astype(str)
# microbiota_data = visitas_datos[etapaSel-1]["muestra"].count()
# La N de la etapa debe ser el número de participantes que cumplieron la etapa.
# esto es diferente al número de participantes que asistieron a la visita N o N+1.
N_etapa = len(participantes.loc[participantes["finished_periods"].isin(range(etapaSel, 4))].index)
multi = make_subplots(rows=2, cols=1, specs=[[{"type":"indicator"}],[{}]])
multi.add_trace(go.Indicator(
value = 100 * comidas_data.sum() / N_etapa,
domain = {'x': [0.25, 1], 'y': [0.70, 0.8]},
title = {'text': "Comidas"},
mode = modes,
number = numbers,
gauge = gauges,
))
multi.add_trace(go.Indicator(
value = 100 * glucosa_data.sum() / N_etapa,
domain = {'x': [0.25, 1], 'y': [0.9, 1.0]},
title = {'text': "Glucómetro"},
mode = modes,
number = numbers,
gauge = gauges
))
multi.add_trace(go.Indicator(
value = 100 * microbiota_data / N_etapa,
domain = {'x': [0.25, 1], 'y': [0.5, 0.6]},
title = {'text': "Microbiota"},
mode = modes,
number = numbers,
gauge = gauges
))
multi.add_trace(
go.Scatter(x=glucosa_scatter.index, y=glucosa_scatter)
)
return multi
@app.callback(
Output("gauges", "figure"), Output("gauges", "figure"),
Input("etapaSel", "value"), Input("etapaSel", "value"),
Input("min_comidas", "value"), Input("min_comidas", "value"),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment