import pandas as pd import numpy as np import re import matplotlib.pyplot as plt print("Procesando el archivo de log para generar el mapa de calor...") try: # --- 1. Cargar los datos del archivo log(3).txt --- log_pattern = re.compile(r'\[(.*?)\] X:(\d+),Y:(\d+),C:(\d+),V:(\d+),P:(\d+),') data = [] filename = '21092025.txt' with open(filename, 'r') as f: for line in f: match = log_pattern.search(line) if match: data.append([ match.group(1),match.group(2), match.group(3), match.group(4), match.group(6) ]) df = pd.DataFrame(data, columns=['t','X', 'Y', 'C', 'P']) df['t'] = df['t'].astype(str) df['X'] = df['X'].astype(int) df['Y'] = df['Y'].astype(int) df['C'] = df['C'].astype(int) df['P'] = df['P'].astype(int) # --- 2. Calcular el "Índice de Rendimiento Óptimo" --- p_range = df['P'].max() - df['P'].min() c_range = df['C'].max() - df['C'].min() if p_range > 0: df['P_norm'] = (df['P'] - df['P'].min()) / p_range else: df['P_norm'] = 0.5 if c_range > 0: df['C_norm'] = (df['C'] - df['C'].min()) / c_range else: df['C_norm'] = 0.5 df['perf_index'] = (df['P_norm'] + df['C_norm']) * (1 - abs(df['P_norm'] - df['C_norm'])) # --- 3. Filtrar para "Rendimiento Extremo" --- threshold = df['perf_index'].quantile(0.5) df_extreme = df[df['perf_index'] > threshold].copy() # --- 4. Crear y guardar el mapa de calor --- plt.figure(figsize=(12, 10)) hb = plt.hexbin( df_extreme['Y'], df_extreme['X'], C=df_extreme['perf_index'], gridsize=60, cmap='plasma', reduce_C_function=np.mean ) cb = plt.colorbar(hb) cb.set_label('Índice de Rendimiento Óptimo (Promedio)', fontsize=12) plt.title('Mapa de Calor de Rendimiento Extremo (log(3).txt)', fontsize=16) plt.xlabel('Coordenada X', fontsize=12) plt.ylabel('Coordenada Y', fontsize=12) plt.grid(True, linestyle='--', alpha=0.3) plt.axis('equal') output_filename = 'heatmap_log3.png' plt.savefig(output_filename) print(f"\n¡Éxito! Se ha guardado el mapa de calor como '{output_filename}'") # Intenta mostrar el gráfico en una ventana emergente plt.show() except FileNotFoundError: print(f"ERROR: No se encontró el archivo '{filename}'. Asegúrate de que esté en la misma carpeta que este script.") except Exception as e: print(f"Ocurrió un error inesperado: {e}")