histlearn commited on
Commit
39f5c5f
·
verified ·
1 Parent(s): 039970f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -15
app.py CHANGED
@@ -204,7 +204,6 @@ def plotar_evolucao_bimestres(disciplinas_dados, temp_dir):
204
  if n_disciplinas == 0:
205
  raise ValueError("Nenhuma disciplina válida encontrada para plotar.")
206
 
207
- # Calcular tamanho da figura para A4 (proporção 1:√2)
208
  plt.figure(figsize=(11.69, 8.27)) # Tamanho A4 em polegadas
209
 
210
  cores = gerar_paleta_cores(n_disciplinas)
@@ -213,23 +212,39 @@ def plotar_evolucao_bimestres(disciplinas_dados, temp_dir):
213
 
214
  plt.grid(True, linestyle='--', alpha=0.3, zorder=0)
215
 
216
- # Configurar deslocamentos para evitar sobreposição
217
- deslocamentos = np.linspace(-0.1, 0.1, n_disciplinas)
218
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
219
  for idx, disc_data in enumerate(disciplinas_dados):
220
  notas = pd.Series(disc_data['notas'])
221
  bimestres_cursados = disc_data['bimestres_cursados']
222
- desloc = deslocamentos[idx] # Valor de deslocamento para esta disciplina
223
 
224
  if bimestres_cursados:
225
  notas_validas = [nota for i, nota in enumerate(notas, 1) if i in bimestres_cursados and nota is not None]
226
  bimestres = [bim for bim in bimestres_cursados if notas[bim-1] is not None]
227
 
228
  if notas_validas:
229
- # Aplicar deslocamento aos bimestres para evitar sobreposição
230
- bimestres_deslocados = [b + desloc for b in bimestres]
231
-
232
- plt.plot(bimestres_deslocados, notas_validas,
233
  color=cores[idx % len(cores)],
234
  marker=marcadores[idx % len(marcadores)],
235
  markersize=8,
@@ -238,13 +253,18 @@ def plotar_evolucao_bimestres(disciplinas_dados, temp_dir):
238
  linestyle=estilos_linha[idx % len(estilos_linha)],
239
  alpha=0.8)
240
 
241
- for x, y in zip(bimestres_deslocados, notas_validas):
242
- if y is not None:
243
- plt.annotate(f"{y:.1f}", (x, y),
244
- textcoords="offset points",
245
- xytext=(0, 5),
246
- ha='center',
247
- fontsize=8)
 
 
 
 
 
248
 
249
  plt.title('Evolução das Médias por Disciplina ao Longo dos Bimestres',
250
  pad=20, fontsize=12, fontweight='bold')
 
204
  if n_disciplinas == 0:
205
  raise ValueError("Nenhuma disciplina válida encontrada para plotar.")
206
 
 
207
  plt.figure(figsize=(11.69, 8.27)) # Tamanho A4 em polegadas
208
 
209
  cores = gerar_paleta_cores(n_disciplinas)
 
212
 
213
  plt.grid(True, linestyle='--', alpha=0.3, zorder=0)
214
 
215
+ # Dicionário para armazenar valores por posição
216
+ notas_por_posicao = {}
217
 
218
+ # Primeira passagem: coletar todos os valores
219
+ for idx, disc_data in enumerate(disciplinas_dados):
220
+ notas = pd.Series(disc_data['notas'])
221
+ bimestres_cursados = disc_data['bimestres_cursados']
222
+
223
+ if bimestres_cursados:
224
+ notas_validas = [nota for i, nota in enumerate(notas, 1) if i in bimestres_cursados and nota is not None]
225
+ bimestres = [bim for bim in bimestres_cursados if notas[bim-1] is not None]
226
+
227
+ for bim, nota in zip(bimestres, notas_validas):
228
+ if nota is not None:
229
+ # Arredonda para uma casa decimal para agrupar valores próximos
230
+ nota_arredondada = round(nota, 1)
231
+ if bim not in notas_por_posicao:
232
+ notas_por_posicao[bim] = {}
233
+ if nota_arredondada not in notas_por_posicao[bim]:
234
+ notas_por_posicao[bim][nota_arredondada] = []
235
+ notas_por_posicao[bim][nota_arredondada].append(idx)
236
+
237
+ # Segunda passagem: plotar os pontos e anotações
238
  for idx, disc_data in enumerate(disciplinas_dados):
239
  notas = pd.Series(disc_data['notas'])
240
  bimestres_cursados = disc_data['bimestres_cursados']
 
241
 
242
  if bimestres_cursados:
243
  notas_validas = [nota for i, nota in enumerate(notas, 1) if i in bimestres_cursados and nota is not None]
244
  bimestres = [bim for bim in bimestres_cursados if notas[bim-1] is not None]
245
 
246
  if notas_validas:
247
+ plt.plot(bimestres, notas_validas,
 
 
 
248
  color=cores[idx % len(cores)],
249
  marker=marcadores[idx % len(marcadores)],
250
  markersize=8,
 
253
  linestyle=estilos_linha[idx % len(estilos_linha)],
254
  alpha=0.8)
255
 
256
+ # Adicionar anotações apenas para o primeiro ponto de cada valor único
257
+ for bim, nota in zip(bimestres, notas_validas):
258
+ if nota is not None:
259
+ nota_arredondada = round(nota, 1)
260
+ # Adicionar anotação apenas se este for o primeiro índice para este valor
261
+ if notas_por_posicao[bim][nota_arredondada][0] == idx:
262
+ plt.annotate(f"{nota_arredondada:.1f}",
263
+ (bim, nota),
264
+ textcoords="offset points",
265
+ xytext=(0, 5),
266
+ ha='center',
267
+ fontsize=8)
268
 
269
  plt.title('Evolução das Médias por Disciplina ao Longo dos Bimestres',
270
  pad=20, fontsize=12, fontweight='bold')