import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import sys import os def plot_results(csv_file: str, output_dir: str = "plots"): if not os.path.exists(csv_file): print(f"Файл {csv_file} не найден.") return df = pd.read_csv(csv_file, encoding='utf-8') required = ["лабиринт", "стратегия", "время_мс", "посещено_клеток", "длина_пути"] for col in required: if col not in df.columns: print(f"В CSV отсутствует колонка {col}") return os.makedirs(output_dir, exist_ok=True) sns.set_style("whitegrid") for maze_name in df["лабиринт"].unique(): maze_df = df[df["лабиринт"] == maze_name] fig, axes = plt.subplots(1, 3, figsize=(15, 5)) fig.suptitle(f"Сравнение стратегий для лабиринта {maze_name}", fontsize=14) ax = axes[0] sns.barplot(data=maze_df, x="стратегия", y="время_мс", ax=ax, palette="viridis") ax.set_title("Время выполнения (мс)") ax.set_ylabel("мс") ax = axes[1] sns.barplot(data=maze_df, x="стратегия", y="посещено_клеток", ax=ax, palette="plasma") ax.set_title("Количество посещённых клеток") ax.set_ylabel("клетки") ax = axes[2] sns.barplot(data=maze_df, x="стратегия", y="длина_пути", ax=ax, palette="coolwarm") ax.set_title("Длина найденного пути") ax.set_ylabel("шаги") plt.tight_layout() plt.savefig(os.path.join(output_dir, f"results_{maze_name}.png"), dpi=150) plt.close() if __name__ == "__main__": if len(sys.argv) < 2: print("Использование: python tables.py <папка_для_сохранения>") print("Пример: python tables.py res.csv plots") sys.exit(1) csv_file = sys.argv[1] out_dir = sys.argv[2] if len(sys.argv) > 2 else "plots" plot_results(csv_file, out_dir)