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 |
|