histlearn commited on
Commit
94a187f
·
verified ·
1 Parent(s): 4a797d4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -15
app.py CHANGED
@@ -404,9 +404,20 @@ class ReportGenerator:
404
 
405
  def create_tasks_performance_plot(self) -> plt.Figure:
406
  """Cria o gráfico de relação entre tarefas e acertos com visualização otimizada."""
407
- plt.figure(figsize=(15, 10))
 
 
 
 
 
 
 
 
 
 
 
408
  ax = plt.gca()
409
-
410
  # Configuração inicial
411
  plt.grid(True, alpha=0.2, linestyle='--')
412
  ax.set_facecolor('#f8f9fa')
@@ -467,20 +478,29 @@ class ReportGenerator:
467
  # Encontrar posição livre para o label
468
  radius = 2.0 + len(group) * 0.5
469
  angle = np.random.uniform(0, 2 * np.pi)
 
470
 
471
  # Tentar diferentes posições até encontrar uma livre
472
  for r in np.arange(radius, radius * 3, radius/2):
473
- label_x = x + r * np.cos(angle)
474
- label_y = y + r * np.sin(angle)
475
-
476
- # Verificar se posição está livre
477
- if not any(calculate_distance((label_x, label_y), pos) < 2.0
478
- for pos in used_positions):
479
- used_positions.append((label_x, label_y))
480
  break
481
- angle += np.pi/4
482
-
483
- # Criar anotação com estilo de conexão padrão
 
 
 
 
 
 
 
 
 
 
 
 
 
 
484
  plt.annotate(
485
  label,
486
  (x, y),
@@ -496,7 +516,7 @@ class ReportGenerator:
496
  fontsize=9,
497
  arrowprops=dict(
498
  arrowstyle='-|>',
499
- connectionstyle='arc3,rad=0.2', # Estilo de conexão padrão
500
  color='gray',
501
  alpha=0.6,
502
  mutation_scale=15
@@ -527,14 +547,13 @@ class ReportGenerator:
527
  plt.legend(
528
  by_label.values(),
529
  by_label.keys(),
530
- bbox_to_anchor=(1.05, 1),
531
  loc='upper left',
532
  borderaxespad=0,
533
  frameon=True,
534
  fancybox=True
535
  )
536
 
537
- plt.tight_layout()
538
  return plt.gcf()
539
 
540
  def generate_graphs(self) -> List[plt.Figure]:
 
404
 
405
  def create_tasks_performance_plot(self) -> plt.Figure:
406
  """Cria o gráfico de relação entre tarefas e acertos com visualização otimizada."""
407
+ # Dimensões do A4 paisagem em polegadas (width=11.69, height=8.27)
408
+ # Usando um pouco menos para garantir margens
409
+ plt.figure(figsize=(10, 6.5))
410
+
411
+ # Ajustar margens para garantir que tudo fique visível
412
+ plt.subplots_adjust(
413
+ left=0.1, # Margem esquerda
414
+ right=0.85, # Margem direita (espaço para legenda)
415
+ top=0.9, # Margem superior
416
+ bottom=0.15 # Margem inferior
417
+ )
418
+
419
  ax = plt.gca()
420
+
421
  # Configuração inicial
422
  plt.grid(True, alpha=0.2, linestyle='--')
423
  ax.set_facecolor('#f8f9fa')
 
478
  # Encontrar posição livre para o label
479
  radius = 2.0 + len(group) * 0.5
480
  angle = np.random.uniform(0, 2 * np.pi)
481
+ found_position = False
482
 
483
  # Tentar diferentes posições até encontrar uma livre
484
  for r in np.arange(radius, radius * 3, radius/2):
485
+ if found_position:
 
 
 
 
 
 
486
  break
487
+ for angle_offset in np.linspace(0, 2*np.pi, 16):
488
+ test_angle = angle + angle_offset
489
+ label_x = x + r * np.cos(test_angle)
490
+ label_y = y + r * np.sin(test_angle)
491
+
492
+ # Verificar se posição está livre
493
+ if not any(calculate_distance((label_x, label_y), pos) < 2.0
494
+ for pos in used_positions):
495
+ used_positions.append((label_x, label_y))
496
+ found_position = True
497
+ break
498
+
499
+ if not found_position:
500
+ label_x = x + radius * np.cos(angle)
501
+ label_y = y + radius * np.sin(angle)
502
+
503
+ # Criar anotação
504
  plt.annotate(
505
  label,
506
  (x, y),
 
516
  fontsize=9,
517
  arrowprops=dict(
518
  arrowstyle='-|>',
519
+ connectionstyle='angle3,angleA=90,angleB=0',
520
  color='gray',
521
  alpha=0.6,
522
  mutation_scale=15
 
547
  plt.legend(
548
  by_label.values(),
549
  by_label.keys(),
550
+ bbox_to_anchor=(1.15, 1), # Ajustado para evitar corte
551
  loc='upper left',
552
  borderaxespad=0,
553
  frameon=True,
554
  fancybox=True
555
  )
556
 
 
557
  return plt.gcf()
558
 
559
  def generate_graphs(self) -> List[plt.Figure]: