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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -35
app.py CHANGED
@@ -47,19 +47,21 @@ chart_type = st.sidebar.selectbox("Tipo de Gráfico", ["Línea", "Barras", "Disp
47
 
48
  # Ingresar valores para los ejes
49
  x_values = st.sidebar.text_area("Valores para X (separados por comas)", "2013,2014,2015,2016,2017,2018")
50
- y_values = st.sidebar.text_area("Valores para Y (separados por comas)", "10,18,5,9,12,21")
 
 
 
 
 
 
 
 
 
 
51
 
52
  # Ingresar nombres para los valores (opcional)
53
  names = st.sidebar.text_area("Nombres para los valores (opcional, separados por comas)", "")
54
 
55
- # Opciones específicas para gráficos de línea
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")
65
  y_label = st.sidebar.text_input("Etiqueta para el eje Y", "Y")
@@ -76,7 +78,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
- 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)
@@ -88,34 +90,25 @@ else:
88
 
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,26 +131,24 @@ 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=["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
 
 
47
 
48
  # Ingresar valores para los ejes
49
  x_values = st.sidebar.text_area("Valores para X (separados por comas)", "2013,2014,2015,2016,2017,2018")
50
+
51
+ # Selector de número de variables Y
52
+ if chart_type == "Línea":
53
+ num_y_vars = st.sidebar.selectbox("Número de variables Y", list(range(1, 11)), index=0)
54
+ y_values_list = []
55
+ for i in range(num_y_vars):
56
+ y_values = st.sidebar.text_area(f"Valores para Y-{i+1} (separados por comas)", f"10,18,5,9,12,21")
57
+ y_values_list.append(y_values)
58
+ else:
59
+ y_values = st.sidebar.text_area("Valores para Y (separados por comas)", "10,18,5,9,12,21")
60
+ y_values_list = [y_values]
61
 
62
  # Ingresar nombres para los valores (opcional)
63
  names = st.sidebar.text_area("Nombres para los valores (opcional, separados por comas)", "")
64
 
 
 
 
 
 
 
 
 
65
  # Etiquetas personalizadas para los ejes
66
  x_label = st.sidebar.text_input("Etiqueta para el eje X", "X")
67
  y_label = st.sidebar.text_input("Etiqueta para el eje Y", "Y")
 
78
 
79
  # Seleccionar color(es) para el gráfico
80
  if use_multiple_colors:
81
+ num_colors = len(y_values_list)
82
  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)
83
  for i in range(num_colors)]
84
  border_colors = [hex_to_rgba(predefined_colors[i % len(predefined_colors)], alpha=0.6)
 
90
 
91
  # Procesar valores
92
  x = x_values.split(",")
93
+ y_values_lists = [[float(i) for i in y_values.split(",") if i.strip()] for y_values in y_values_list]
 
 
 
 
94
  names = names.split(",") if names else None
95
 
96
  # Verificar si las listas tienen el mismo tamaño
97
+ if any(len(x) != len(y) for y in y_values_lists):
98
+ st.error("Todos los valores de X y Y deben tener la misma cantidad de elementos.")
99
+ elif names and len(names) != len(x):
 
 
100
  st.error("La cantidad de nombres debe ser igual a la cantidad de valores Y.")
101
  else:
102
  # Crear un DataFrame
103
+ data = pd.DataFrame({"X": x})
104
+ for idx, y_set in enumerate(y_values_lists):
105
+ data[f"Y{idx+1}"] = y_set
106
  if names:
107
  data["Nombre"] = names
108
 
109
  # Calcular el rango del eje Y
110
+ y_min, y_max = min(min(y_set) for y_set in y_values_lists), max(max(y_set) for y_set in y_values_lists)
111
+ y_min, y_max = calculate_y_range([y_min, y_max])
 
 
 
112
 
113
  # Determinar si mostrar la leyenda
114
  show_legend = show_legend and bool(names)
 
131
 
132
  # Generar el gráfico basado en el tipo seleccionado
133
  if chart_type == "Línea":
134
+ fig = px.line(data, x="X", y=[f"Y{idx+1}" for idx in range(len(y_values_lists))], line_shape="spline")
135
  if not use_multiple_colors:
136
  fig.update_traces(line_color=color)
 
 
137
  elif chart_type == "Barras":
138
+ fig = px.bar(data, x="X", y="Y1", hover_name="Nombre" if names else None)
139
  if not use_multiple_colors:
140
  fig.update_traces(marker_color=color, marker_line_color=border_color, marker_line_width=1.5)
141
  fig.update_layout(bargap=0.2) # Ajustar el espacio entre las barras
142
  elif chart_type == "Dispersión":
143
+ fig = px.scatter(data, x="X", y="Y1", hover_name="Nombre" if names else None)
144
  if not use_multiple_colors:
145
  fig.update_traces(marker_color=color)
146
  elif chart_type == "Área":
147
+ fig = px.area(data, x="X", y="Y1", line_shape="spline", hover_name="Nombre" if names else None)
148
  if not use_multiple_colors:
149
  fig.update_traces(fillcolor=color, line_color=border_color)
150
  elif chart_type == "Pastel":
151
+ fig = px.pie(data, values="Y1", names="X", hover_name="Nombre" if names else None)
152
  if not use_multiple_colors:
153
  fig.update_traces(marker=dict(colors=[color]*len(x)))
154