AIdeaText commited on
Commit
cb02069
·
verified ·
1 Parent(s): 9c37b64

Update modules/studentact/current_situation_interface.py

Browse files
modules/studentact/current_situation_interface.py CHANGED
@@ -114,64 +114,76 @@ def display_current_situation_interface(lang_code, nlp_models, t):
114
 
115
  def display_radar_chart(metrics):
116
  """
117
- Muestra un gráfico de radar con las cuatro métricas.
118
  """
119
  try:
120
- # Preparar datos para el gráfico de radar
121
- categories = ['Vocabulario', 'Estructura', 'Cohesión', 'Claridad']
122
- values = [
123
- metrics['vocabulary']['normalized_score'],
124
- metrics['structure']['normalized_score'],
125
- metrics['cohesion']['normalized_score'],
126
- metrics['clarity']['normalized_score']
127
- ]
128
-
129
- # Crear figura
130
- fig = plt.figure(figsize=(8, 8))
131
- ax = fig.add_subplot(111, projection='polar')
132
-
133
- # Número de variables
134
- num_vars = len(categories)
135
-
136
- # Calcular ángulos para cada eje
137
- angles = [n / float(num_vars) * 2 * np.pi for n in range(num_vars)]
138
- angles += angles[:1] # Completar el círculo
139
-
140
- # Extender valores para cerrar el polígono
141
- values += values[:1]
142
-
143
- # Dibujar las líneas de la cuadrícula principal
144
- ax.set_xticks(angles[:-1])
145
- ax.set_xticklabels(categories)
146
-
147
- # Configurar círculos concéntricos y etiquetas
148
- circle_ticks = np.arange(0, 1.1, 0.1)
149
- ax.set_yticks(circle_ticks)
150
- ax.set_yticklabels([f'{tick:.1f}' for tick in circle_ticks])
151
- ax.set_ylim(0, 1)
152
-
153
- # Dibujar líneas de la cuadrícula
154
- ax.grid(True)
155
-
156
- # Dibujar el gráfico
157
- ax.plot(angles, values, 'o-', linewidth=2, label='Métricas')
158
- ax.fill(angles, values, alpha=0.25)
159
-
160
- # Ajustar el layout y mostrar
161
- plt.tight_layout()
162
- st.pyplot(fig)
163
- plt.close()
164
-
165
- # Mostrar valores numéricos debajo del gráfico
166
- col1, col2, col3, col4 = st.columns(4)
167
- with col1:
168
- st.metric("Vocabulario", f"{values[0]:.2f}")
169
- with col2:
170
- st.metric("Estructura", f"{values[1]:.2f}")
171
- with col3:
172
- st.metric("Cohesión", f"{values[2]:.2f}")
173
- with col4:
174
- st.metric("Claridad", f"{values[3]:.2f}")
 
 
 
 
 
 
 
 
 
 
 
 
175
 
176
  except Exception as e:
177
  logger.error(f"Error generando gráfico de radar: {str(e)}")
 
114
 
115
  def display_radar_chart(metrics):
116
  """
117
+ Muestra un gráfico de radar con las métricas del usuario y el patrón ideal.
118
  """
119
  try:
120
+ # Container con proporción reducida
121
+ with st.container():
122
+ # Métricas en la parte superior
123
+ col1, col2, col3, col4 = st.columns(4)
124
+ with col1:
125
+ st.metric("Vocabulario", f"{metrics['vocabulary']['normalized_score']:.2f}", "1.00")
126
+ with col2:
127
+ st.metric("Estructura", f"{metrics['structure']['normalized_score']:.2f}", "1.00")
128
+ with col3:
129
+ st.metric("Cohesión", f"{metrics['cohesion']['normalized_score']:.2f}", "1.00")
130
+ with col4:
131
+ st.metric("Claridad", f"{metrics['clarity']['normalized_score']:.2f}", "1.00")
132
+
133
+ # Contenedor para el gráfico con ancho controlado
134
+ _, graph_col, _ = st.columns([1,2,1])
135
+
136
+ with graph_col:
137
+ # Preparar datos
138
+ categories = ['Vocabulario', 'Estructura', 'Cohesión', 'Claridad']
139
+ values_user = [
140
+ metrics['vocabulary']['normalized_score'],
141
+ metrics['structure']['normalized_score'],
142
+ metrics['cohesion']['normalized_score'],
143
+ metrics['clarity']['normalized_score']
144
+ ]
145
+ values_pattern = [1.0, 1.0, 1.0, 1.0] # Patrón ideal
146
+
147
+ # Crear figura más compacta
148
+ fig = plt.figure(figsize=(6, 6))
149
+ ax = fig.add_subplot(111, projection='polar')
150
+
151
+ # Número de variables
152
+ num_vars = len(categories)
153
+
154
+ # Calcular ángulos
155
+ angles = [n / float(num_vars) * 2 * np.pi for n in range(num_vars)]
156
+ angles += angles[:1]
157
+
158
+ # Extender valores para cerrar polígonos
159
+ values_user += values_user[:1]
160
+ values_pattern += values_pattern[:1]
161
+
162
+ # Configurar ejes y etiquetas
163
+ ax.set_xticks(angles[:-1])
164
+ ax.set_xticklabels(categories, fontsize=8)
165
+
166
+ # Círculos concéntricos y etiquetas
167
+ circle_ticks = np.arange(0, 1.1, 0.2) # Reducido a 5 niveles
168
+ ax.set_yticks(circle_ticks)
169
+ ax.set_yticklabels([f'{tick:.1f}' for tick in circle_ticks], fontsize=8)
170
+ ax.set_ylim(0, 1)
171
+
172
+ # Dibujar patrón ideal
173
+ ax.plot(angles, values_pattern, 'g--', linewidth=1, label='Patrón', alpha=0.5)
174
+ ax.fill(angles, values_pattern, 'g', alpha=0.1)
175
+
176
+ # Dibujar valores del usuario
177
+ ax.plot(angles, values_user, 'b-', linewidth=2, label='Tu escritura')
178
+ ax.fill(angles, values_user, 'b', alpha=0.2)
179
+
180
+ # Leyenda
181
+ ax.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1), fontsize=8)
182
+
183
+ # Ajustes finales
184
+ plt.tight_layout()
185
+ st.pyplot(fig)
186
+ plt.close()
187
 
188
  except Exception as e:
189
  logger.error(f"Error generando gráfico de radar: {str(e)}")