tx3bas commited on
Commit
9a3ae92
·
verified ·
1 Parent(s): 711f332

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -22
app.py CHANGED
@@ -56,9 +56,9 @@ names = st.sidebar.text_area("Nombres para los valores (opcional, separados por
56
  if chart_type == "Línea":
57
  multiple_y = st.sidebar.checkbox("Múltiple")
58
  if multiple_y:
59
- y_values_list = st.sidebar.text_area("Valores adicionales para Y (separados por comas, una línea por conjunto)", "15,23,7,14,19,25\n9,17,4,8,11,20")
60
  else:
61
- y_values_list = y_values
62
 
63
  # Etiquetas personalizadas para los ejes
64
  x_label = st.sidebar.text_input("Etiqueta para el eje X", "X")
@@ -76,10 +76,7 @@ use_multiple_colors = st.sidebar.checkbox("Usar múltiples colores")
76
 
77
  # Seleccionar color(es) para el gráfico
78
  if use_multiple_colors:
79
- if chart_type == "Línea" and multiple_y:
80
- num_colors = len(y_values_list.split("\n")[0].split(","))
81
- else:
82
- num_colors = len(y_values.split(","))
83
  colors = [hex_to_rgba(st.sidebar.color_picker(f"Color {i+1}", predefined_colors[i % len(predefined_colors)], key=f"color_{i}"), alpha=0.3)
84
  for i in range(num_colors)]
85
  border_colors = [hex_to_rgba(predefined_colors[i % len(predefined_colors)], alpha=0.6)
@@ -92,30 +89,33 @@ else:
92
  # Procesar valores
93
  x = x_values.split(",")
94
  y = [float(i) for i in y_values.split(",") if i.strip()]
95
- if chart_type == "Línea" and multiple_y:
96
- y_values_lists = [list(map(float, y_set.split(","))) for y_set in y_values_list.split("\n")]
97
- if any(len(y_set) != len(x) for y_set in y_values_lists):
98
- st.error("Todos los conjuntos de valores Y deben tener la misma cantidad de elementos que los valores de X.")
99
  else:
100
- y_values_lists = [y]
101
-
102
  names = names.split(",") if names else None
103
 
104
  # Verificar si las listas tienen el mismo tamaño
105
  if len(x) != len(y):
106
  st.error("Los valores de X y Y deben tener la misma cantidad de elementos.")
 
 
107
  elif names and len(names) != len(y):
108
  st.error("La cantidad de nombres debe ser igual a la cantidad de valores Y.")
109
  else:
110
  # Crear un DataFrame
111
- data = pd.DataFrame({"X": x})
112
- for idx, y_set in enumerate(y_values_lists):
113
- data[f"Y{idx}"] = y_set
114
  if names:
115
  data["Nombre"] = names
116
 
117
  # Calcular el rango del eje Y
118
  y_min, y_max = calculate_y_range(y)
 
 
 
 
119
 
120
  # Determinar si mostrar la leyenda
121
  show_legend = show_legend and bool(names)
@@ -138,25 +138,26 @@ else:
138
 
139
  # Generar el gráfico basado en el tipo seleccionado
140
  if chart_type == "Línea":
141
- fig = px.line(data, x="X", y=[f"Y{idx}" for idx in range(len(y_values_lists))], line_shape="spline")
142
  if not use_multiple_colors:
143
- for idx in range(len(y_values_lists)):
144
- fig.update_traces(selector=dict(name=f"Y{idx}"), line_color=color)
 
145
  elif chart_type == "Barras":
146
- fig = px.bar(data, x="X", y="Y0", hover_name="Nombre" if names else None)
147
  if not use_multiple_colors:
148
  fig.update_traces(marker_color=color, marker_line_color=border_color, marker_line_width=1.5)
149
  fig.update_layout(bargap=0.2) # Ajustar el espacio entre las barras
150
  elif chart_type == "Dispersión":
151
- fig = px.scatter(data, x="X", y="Y0", hover_name="Nombre" if names else None)
152
  if not use_multiple_colors:
153
  fig.update_traces(marker_color=color)
154
  elif chart_type == "Área":
155
- fig = px.area(data, x="X", y="Y0", line_shape="spline", hover_name="Nombre" if names else None)
156
  if not use_multiple_colors:
157
  fig.update_traces(fillcolor=color, line_color=border_color)
158
  elif chart_type == "Pastel":
159
- fig = px.pie(data, values="Y0", names="X", hover_name="Nombre" if names else None)
160
  if not use_multiple_colors:
161
  fig.update_traces(marker=dict(colors=[color]*len(x)))
162
 
 
56
  if chart_type == "Línea":
57
  multiple_y = st.sidebar.checkbox("Múltiple")
58
  if multiple_y:
59
+ y2_values = st.sidebar.text_area("Valores para Y-2 (separados por comas)", "15,23,7,14,19,25")
60
  else:
61
+ y2_values = None
62
 
63
  # Etiquetas personalizadas para los ejes
64
  x_label = st.sidebar.text_input("Etiqueta para el eje X", "X")
 
76
 
77
  # Seleccionar color(es) para el gráfico
78
  if use_multiple_colors:
79
+ num_colors = len(y_values.split(","))
 
 
 
80
  colors = [hex_to_rgba(st.sidebar.color_picker(f"Color {i+1}", predefined_colors[i % len(predefined_colors)], key=f"color_{i}"), alpha=0.3)
81
  for i in range(num_colors)]
82
  border_colors = [hex_to_rgba(predefined_colors[i % len(predefined_colors)], alpha=0.6)
 
89
  # Procesar valores
90
  x = x_values.split(",")
91
  y = [float(i) for i in y_values.split(",") if i.strip()]
92
+ if y2_values:
93
+ y2 = [float(i) for i in y2_values.split(",") if i.strip()]
 
 
94
  else:
95
+ y2 = None
 
96
  names = names.split(",") if names else None
97
 
98
  # Verificar si las listas tienen el mismo tamaño
99
  if len(x) != len(y):
100
  st.error("Los valores de X y Y deben tener la misma cantidad de elementos.")
101
+ elif y2 and len(x) != len(y2):
102
+ st.error("Los valores de X y Y-2 deben tener la misma cantidad de elementos.")
103
  elif names and len(names) != len(y):
104
  st.error("La cantidad de nombres debe ser igual a la cantidad de valores Y.")
105
  else:
106
  # Crear un DataFrame
107
+ data = pd.DataFrame({"X": x, "Y": y})
108
+ if y2:
109
+ data["Y2"] = y2
110
  if names:
111
  data["Nombre"] = names
112
 
113
  # Calcular el rango del eje Y
114
  y_min, y_max = calculate_y_range(y)
115
+ if y2:
116
+ y2_min, y2_max = calculate_y_range(y2)
117
+ y_min = min(y_min, y2_min)
118
+ y_max = max(y_max, y2_max)
119
 
120
  # Determinar si mostrar la leyenda
121
  show_legend = show_legend and bool(names)
 
138
 
139
  # Generar el gráfico basado en el tipo seleccionado
140
  if chart_type == "Línea":
141
+ fig = px.line(data, x="X", y=["Y", "Y2"] if y2 else "Y", line_shape="spline")
142
  if not use_multiple_colors:
143
+ fig.update_traces(line_color=color)
144
+ if y2:
145
+ fig.data[1].line.color = "orange" # Puedes ajustar este color según tus preferencias
146
  elif chart_type == "Barras":
147
+ fig = px.bar(data, x="X", y="Y", hover_name="Nombre" if names else None)
148
  if not use_multiple_colors:
149
  fig.update_traces(marker_color=color, marker_line_color=border_color, marker_line_width=1.5)
150
  fig.update_layout(bargap=0.2) # Ajustar el espacio entre las barras
151
  elif chart_type == "Dispersión":
152
+ fig = px.scatter(data, x="X", y="Y", hover_name="Nombre" if names else None)
153
  if not use_multiple_colors:
154
  fig.update_traces(marker_color=color)
155
  elif chart_type == "Área":
156
+ fig = px.area(data, x="X", y="Y", line_shape="spline", hover_name="Nombre" if names else None)
157
  if not use_multiple_colors:
158
  fig.update_traces(fillcolor=color, line_color=border_color)
159
  elif chart_type == "Pastel":
160
+ fig = px.pie(data, values="Y", names="X", hover_name="Nombre" if names else None)
161
  if not use_multiple_colors:
162
  fig.update_traces(marker=dict(colors=[color]*len(x)))
163