76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
import pandas as pd
|
||
import matplotlib.pyplot as plt
|
||
import numpy as np
|
||
|
||
df = pd.read_csv("results.csv")
|
||
|
||
maze_order = ["small_10", "medium_50", "large_100", "empty", "no_path"]
|
||
strategy_order = ["BFS", "DFS", "AStar"]
|
||
|
||
maze_labels = {
|
||
"small_10": "10×10",
|
||
"medium_50": "50×50",
|
||
"large_100": "100×100",
|
||
"empty": "Пустой",
|
||
"no_path": "Без выхода"
|
||
}
|
||
|
||
df["maze"] = pd.Categorical(df["maze"], categories=maze_order, ordered=True)
|
||
df["strategy"] = pd.Categorical(df["strategy"], categories=strategy_order, ordered=True)
|
||
df = df.sort_values(["maze", "strategy"])
|
||
|
||
|
||
def plot_grouped_bar(df, value_col, ylabel, title, filename):
|
||
mazes = maze_order
|
||
strategies = strategy_order
|
||
|
||
x = np.arange(len(mazes))
|
||
width = 0.25
|
||
|
||
plt.figure(figsize=(11, 6))
|
||
|
||
for i, strategy in enumerate(strategies):
|
||
values = []
|
||
|
||
for maze in mazes:
|
||
row = df[(df["maze"] == maze) & (df["strategy"] == strategy)]
|
||
values.append(row[value_col].values[0])
|
||
|
||
plt.bar(x + (i - 1) * width, values, width, label=strategy)
|
||
|
||
plt.xlabel("Лабиринт")
|
||
plt.ylabel(ylabel)
|
||
plt.title(title)
|
||
|
||
plt.xticks(x, [maze_labels[m] for m in mazes], rotation=20)
|
||
plt.legend(title="Стратегия")
|
||
plt.grid(axis="y", alpha=0.3)
|
||
|
||
plt.tight_layout()
|
||
plt.savefig(filename, format="svg")
|
||
plt.show()
|
||
|
||
|
||
plot_grouped_bar(
|
||
df,
|
||
value_col="time_ms",
|
||
ylabel="Время, мс",
|
||
title="Сравнение времени выполнения BFS, DFS и A*",
|
||
filename="time_comparison.svg"
|
||
)
|
||
|
||
plot_grouped_bar(
|
||
df,
|
||
value_col="cells_visited",
|
||
ylabel="Количество посещённых клеток",
|
||
title="Сравнение количества посещённых клеток",
|
||
filename="visited_cells_comparison.svg"
|
||
)
|
||
|
||
plot_grouped_bar(
|
||
df,
|
||
value_col="way_len",
|
||
ylabel="Длина пути, клеток",
|
||
title="Сравнение длины найденного пути",
|
||
filename="path_length_comparison.svg"
|
||
) |