Update app.py
Browse files
app.py
CHANGED
|
@@ -74,7 +74,10 @@ def calcular_promedio_desviacion(df, n_replicas, unidad_medida):
|
|
| 74 |
|
| 75 |
return df
|
| 76 |
|
| 77 |
-
def generar_graficos(df_valid, n_replicas, unidad_medida,
|
|
|
|
|
|
|
|
|
|
| 78 |
col_predicha_num = "Concentración Predicha Numérica"
|
| 79 |
col_real_promedio = f"Concentración Real Promedio ({unidad_medida})"
|
| 80 |
col_desviacion = f"Desviación Estándar ({unidad_medida})"
|
|
@@ -92,16 +95,6 @@ def generar_graficos(df_valid, n_replicas, unidad_medida, estilo_grafico, mostra
|
|
| 92 |
sns.set(style="whitegrid")
|
| 93 |
plt.rcParams.update({'figure.autolayout': True})
|
| 94 |
|
| 95 |
-
# Definir estilos de gráficos
|
| 96 |
-
estilos = {
|
| 97 |
-
"Estilo 1": {"color_puntos": "blue", "color_linea": "green", "color_error": "lightgray", "marker": "o", "line_style": "-"},
|
| 98 |
-
"Estilo 2": {"color_puntos": "red", "color_linea": "orange", "color_error": "pink", "marker": "s", "line_style": "--"},
|
| 99 |
-
"Estilo 3": {"color_puntos": "purple", "color_linea": "cyan", "color_error": "gray", "marker": "^", "line_style": "-."},
|
| 100 |
-
"Estilo 4": {"color_puntos": "black", "color_linea": "yellow", "color_error": "darkgray", "marker": "D", "line_style": ":"}
|
| 101 |
-
}
|
| 102 |
-
|
| 103 |
-
estilo = estilos.get(estilo_grafico, estilos["Estilo 1"])
|
| 104 |
-
|
| 105 |
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
|
| 106 |
|
| 107 |
# Gráfico de dispersión con línea de regresión
|
|
@@ -112,9 +105,9 @@ def generar_graficos(df_valid, n_replicas, unidad_medida, estilo_grafico, mostra
|
|
| 112 |
df_valid[col_predicha_num],
|
| 113 |
df_valid[col_real_promedio],
|
| 114 |
yerr=df_valid[col_desviacion],
|
| 115 |
-
fmt=
|
| 116 |
-
color=
|
| 117 |
-
ecolor=
|
| 118 |
elinewidth=2,
|
| 119 |
capsize=3,
|
| 120 |
label='Datos Reales'
|
|
@@ -123,10 +116,10 @@ def generar_graficos(df_valid, n_replicas, unidad_medida, estilo_grafico, mostra
|
|
| 123 |
ax1.scatter(
|
| 124 |
df_valid[col_predicha_num],
|
| 125 |
df_valid[col_real_promedio],
|
| 126 |
-
color=
|
| 127 |
s=100,
|
| 128 |
label='Datos Reales',
|
| 129 |
-
marker=
|
| 130 |
)
|
| 131 |
|
| 132 |
# Línea de ajuste
|
|
@@ -134,10 +127,10 @@ def generar_graficos(df_valid, n_replicas, unidad_medida, estilo_grafico, mostra
|
|
| 134 |
ax1.plot(
|
| 135 |
df_valid[col_predicha_num],
|
| 136 |
df_valid['Ajuste Lineal'],
|
| 137 |
-
color=
|
| 138 |
label='Ajuste Lineal',
|
| 139 |
linewidth=2,
|
| 140 |
-
linestyle=
|
| 141 |
)
|
| 142 |
|
| 143 |
# Línea ideal
|
|
@@ -147,8 +140,8 @@ def generar_graficos(df_valid, n_replicas, unidad_medida, estilo_grafico, mostra
|
|
| 147 |
ax1.plot(
|
| 148 |
[min_predicha, max_predicha],
|
| 149 |
[min_predicha, max_predicha],
|
| 150 |
-
color=
|
| 151 |
-
linestyle=
|
| 152 |
label='Ideal'
|
| 153 |
)
|
| 154 |
|
|
@@ -174,9 +167,9 @@ def generar_graficos(df_valid, n_replicas, unidad_medida, estilo_grafico, mostra
|
|
| 174 |
ax2.scatter(
|
| 175 |
df_valid[col_predicha_num],
|
| 176 |
residuos,
|
| 177 |
-
color=
|
| 178 |
s=100,
|
| 179 |
-
marker=
|
| 180 |
label='Residuos'
|
| 181 |
)
|
| 182 |
|
|
@@ -286,12 +279,24 @@ def actualizar_analisis(df, n_replicas, unidad_medida):
|
|
| 286 |
df_valid['Ajuste Lineal'] = intercept + slope * df_valid[col_predicha_num]
|
| 287 |
|
| 288 |
# Generar gráfico con opciones predeterminadas
|
| 289 |
-
fig = generar_graficos(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 290 |
informe, estado = generar_informe_completo(df_valid, n_replicas, unidad_medida)
|
| 291 |
|
| 292 |
return estado, fig, informe, df
|
| 293 |
|
| 294 |
-
def actualizar_graficos(df, n_replicas, unidad_medida,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 295 |
if df is None or df.empty:
|
| 296 |
return None
|
| 297 |
|
|
@@ -311,7 +316,14 @@ def actualizar_graficos(df, n_replicas, unidad_medida, estilo_grafico, mostrar_l
|
|
| 311 |
return None
|
| 312 |
|
| 313 |
# Generar gráfico con opciones seleccionadas
|
| 314 |
-
fig = generar_graficos(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 315 |
|
| 316 |
return fig
|
| 317 |
|
|
@@ -573,10 +585,41 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
| 573 |
|
| 574 |
# Opciones y botones debajo del gráfico
|
| 575 |
with gr.Row():
|
| 576 |
-
|
| 577 |
-
choices=["
|
| 578 |
-
value="
|
| 579 |
-
label="
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 580 |
)
|
| 581 |
mostrar_linea_ajuste = gr.Checkbox(value=True, label="Mostrar Línea de Ajuste")
|
| 582 |
mostrar_linea_ideal = gr.Checkbox(value=True, label="Mostrar Línea Ideal")
|
|
@@ -609,7 +652,14 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
| 609 |
# Evento para graficar con opciones seleccionadas
|
| 610 |
graficar_btn.click(
|
| 611 |
fn=actualizar_graficos,
|
| 612 |
-
inputs=[
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 613 |
outputs=graficos_output
|
| 614 |
)
|
| 615 |
|
|
|
|
| 74 |
|
| 75 |
return df
|
| 76 |
|
| 77 |
+
def generar_graficos(df_valid, n_replicas, unidad_medida, color_puntos, estilo_puntos,
|
| 78 |
+
color_linea_ajuste, estilo_linea_ajuste,
|
| 79 |
+
color_linea_ideal, estilo_linea_ideal,
|
| 80 |
+
color_barras_error, mostrar_linea_ajuste, mostrar_linea_ideal, mostrar_puntos):
|
| 81 |
col_predicha_num = "Concentración Predicha Numérica"
|
| 82 |
col_real_promedio = f"Concentración Real Promedio ({unidad_medida})"
|
| 83 |
col_desviacion = f"Desviación Estándar ({unidad_medida})"
|
|
|
|
| 95 |
sns.set(style="whitegrid")
|
| 96 |
plt.rcParams.update({'figure.autolayout': True})
|
| 97 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
|
| 99 |
|
| 100 |
# Gráfico de dispersión con línea de regresión
|
|
|
|
| 105 |
df_valid[col_predicha_num],
|
| 106 |
df_valid[col_real_promedio],
|
| 107 |
yerr=df_valid[col_desviacion],
|
| 108 |
+
fmt=estilo_puntos,
|
| 109 |
+
color=color_puntos,
|
| 110 |
+
ecolor=color_barras_error,
|
| 111 |
elinewidth=2,
|
| 112 |
capsize=3,
|
| 113 |
label='Datos Reales'
|
|
|
|
| 116 |
ax1.scatter(
|
| 117 |
df_valid[col_predicha_num],
|
| 118 |
df_valid[col_real_promedio],
|
| 119 |
+
color=color_puntos,
|
| 120 |
s=100,
|
| 121 |
label='Datos Reales',
|
| 122 |
+
marker=estilo_puntos
|
| 123 |
)
|
| 124 |
|
| 125 |
# Línea de ajuste
|
|
|
|
| 127 |
ax1.plot(
|
| 128 |
df_valid[col_predicha_num],
|
| 129 |
df_valid['Ajuste Lineal'],
|
| 130 |
+
color=color_linea_ajuste,
|
| 131 |
label='Ajuste Lineal',
|
| 132 |
linewidth=2,
|
| 133 |
+
linestyle=estilo_linea_ajuste
|
| 134 |
)
|
| 135 |
|
| 136 |
# Línea ideal
|
|
|
|
| 140 |
ax1.plot(
|
| 141 |
[min_predicha, max_predicha],
|
| 142 |
[min_predicha, max_predicha],
|
| 143 |
+
color=color_linea_ideal,
|
| 144 |
+
linestyle=estilo_linea_ideal,
|
| 145 |
label='Ideal'
|
| 146 |
)
|
| 147 |
|
|
|
|
| 167 |
ax2.scatter(
|
| 168 |
df_valid[col_predicha_num],
|
| 169 |
residuos,
|
| 170 |
+
color=color_puntos,
|
| 171 |
s=100,
|
| 172 |
+
marker=estilo_puntos,
|
| 173 |
label='Residuos'
|
| 174 |
)
|
| 175 |
|
|
|
|
| 279 |
df_valid['Ajuste Lineal'] = intercept + slope * df_valid[col_predicha_num]
|
| 280 |
|
| 281 |
# Generar gráfico con opciones predeterminadas
|
| 282 |
+
fig = generar_graficos(
|
| 283 |
+
df_valid, n_replicas, unidad_medida,
|
| 284 |
+
color_puntos='blue', estilo_puntos='o',
|
| 285 |
+
color_linea_ajuste='green', estilo_linea_ajuste='-',
|
| 286 |
+
color_linea_ideal='red', estilo_linea_ideal='--',
|
| 287 |
+
color_barras_error='lightgray',
|
| 288 |
+
mostrar_linea_ajuste=True, mostrar_linea_ideal=True, mostrar_puntos=True
|
| 289 |
+
)
|
| 290 |
informe, estado = generar_informe_completo(df_valid, n_replicas, unidad_medida)
|
| 291 |
|
| 292 |
return estado, fig, informe, df
|
| 293 |
|
| 294 |
+
def actualizar_graficos(df, n_replicas, unidad_medida,
|
| 295 |
+
color_puntos, estilo_puntos,
|
| 296 |
+
color_linea_ajuste, estilo_linea_ajuste,
|
| 297 |
+
color_linea_ideal, estilo_linea_ideal,
|
| 298 |
+
color_barras_error,
|
| 299 |
+
mostrar_linea_ajuste, mostrar_linea_ideal, mostrar_puntos):
|
| 300 |
if df is None or df.empty:
|
| 301 |
return None
|
| 302 |
|
|
|
|
| 316 |
return None
|
| 317 |
|
| 318 |
# Generar gráfico con opciones seleccionadas
|
| 319 |
+
fig = generar_graficos(
|
| 320 |
+
df_valid, n_replicas, unidad_medida,
|
| 321 |
+
color_puntos, estilo_puntos,
|
| 322 |
+
color_linea_ajuste, estilo_linea_ajuste,
|
| 323 |
+
color_linea_ideal, estilo_linea_ideal,
|
| 324 |
+
color_barras_error,
|
| 325 |
+
mostrar_linea_ajuste, mostrar_linea_ideal, mostrar_puntos
|
| 326 |
+
)
|
| 327 |
|
| 328 |
return fig
|
| 329 |
|
|
|
|
| 585 |
|
| 586 |
# Opciones y botones debajo del gráfico
|
| 587 |
with gr.Row():
|
| 588 |
+
color_puntos_dropdown = gr.Dropdown(
|
| 589 |
+
choices=["blue", "red", "green", "purple", "orange", "black"],
|
| 590 |
+
value="blue",
|
| 591 |
+
label="Color de Puntos"
|
| 592 |
+
)
|
| 593 |
+
estilo_puntos_dropdown = gr.Dropdown(
|
| 594 |
+
choices=["o", "s", "^", "D", "v", "<", ">", "h", "H", "p", "*", "X", "d"],
|
| 595 |
+
value="o",
|
| 596 |
+
label="Estilo de Puntos"
|
| 597 |
+
)
|
| 598 |
+
color_linea_ajuste_dropdown = gr.Dropdown(
|
| 599 |
+
choices=["green", "blue", "red", "purple", "orange", "black"],
|
| 600 |
+
value="green",
|
| 601 |
+
label="Color Línea de Ajuste"
|
| 602 |
+
)
|
| 603 |
+
estilo_linea_ajuste_dropdown = gr.Dropdown(
|
| 604 |
+
choices=["-", "--", "-.", ":"],
|
| 605 |
+
value="-",
|
| 606 |
+
label="Estilo Línea de Ajuste"
|
| 607 |
+
)
|
| 608 |
+
with gr.Row():
|
| 609 |
+
color_linea_ideal_dropdown = gr.Dropdown(
|
| 610 |
+
choices=["red", "green", "blue", "purple", "orange", "black"],
|
| 611 |
+
value="red",
|
| 612 |
+
label="Color Línea Ideal"
|
| 613 |
+
)
|
| 614 |
+
estilo_linea_ideal_dropdown = gr.Dropdown(
|
| 615 |
+
choices=["--", "-", "-.", ":"],
|
| 616 |
+
value="--",
|
| 617 |
+
label="Estilo Línea Ideal"
|
| 618 |
+
)
|
| 619 |
+
color_barras_error_dropdown = gr.Dropdown(
|
| 620 |
+
choices=["lightgray", "gray", "darkgray", "pink", "lightblue", "lightgreen"],
|
| 621 |
+
value="lightgray",
|
| 622 |
+
label="Color Barras de Error"
|
| 623 |
)
|
| 624 |
mostrar_linea_ajuste = gr.Checkbox(value=True, label="Mostrar Línea de Ajuste")
|
| 625 |
mostrar_linea_ideal = gr.Checkbox(value=True, label="Mostrar Línea Ideal")
|
|
|
|
| 652 |
# Evento para graficar con opciones seleccionadas
|
| 653 |
graficar_btn.click(
|
| 654 |
fn=actualizar_graficos,
|
| 655 |
+
inputs=[
|
| 656 |
+
tabla_output, replicas_slider, unidad_input,
|
| 657 |
+
color_puntos_dropdown, estilo_puntos_dropdown,
|
| 658 |
+
color_linea_ajuste_dropdown, estilo_linea_ajuste_dropdown,
|
| 659 |
+
color_linea_ideal_dropdown, estilo_linea_ideal_dropdown,
|
| 660 |
+
color_barras_error_dropdown,
|
| 661 |
+
mostrar_linea_ajuste, mostrar_linea_ideal, mostrar_puntos
|
| 662 |
+
],
|
| 663 |
outputs=graficos_output
|
| 664 |
)
|
| 665 |
|