import sys import os import yaml import matplotlib.pyplot as plt import numpy as np scores_big =[] name = [] colors = [] def s_a(n): return sum(n)/len(n) def mediana(n): while len(n) >2: n.remove(min(n)) n.remove(max(n)) if len(n) == 2: return s_a(n) else: return n[0] def plot(ax, path, color): scores =[] for filename in sorted(os.listdir(path)): file_path = os.path.join(path, filename) # Check if it is a file and not a subdirectory if os.path.isfile(file_path) and file_path.endswith('.yaml'): with open(file_path, 'r', encoding='utf-8') as file: data = yaml.load(file, Loader = yaml.Loader) #scores.append(data['score']) scores.append(data['score']/data['total_time']) ax.plot(range(1, len(scores)+1),scores, '.-', label=f"{path.split('/')[-1]}'s scores", color = color) ax.plot((1, len(scores)),(s_a(scores), s_a(scores)), '--', label=f"{path.split('/')[-1]}'s mean ({round(s_a(scores), 3)})", color = color) ax.plot((1, len(scores)),(mediana(scores), mediana(scores)), ':', label=f"{path.split('/')[-1]}'s mediana ({round(mediana(scores), 3)})", color = color) def boxplot(ax, path, color): scores =[] for filename in sorted(os.listdir(path)): file_path = os.path.join(path, filename) # Check if it is a file and not a subdirectory if os.path.isfile(file_path) and file_path.endswith('.yaml'): with open(file_path, 'r', encoding='utf-8') as file: data = yaml.load(file, Loader = yaml.Loader) #scores.append(data['score']) scores.append(data['score']/data['total_time']) scores_big.append(scores) name.append(path.split('/')[-1]) colors.append(color) if __name__ == '__main__': fig, ax = plt.subplots() boxplot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/Dima", "limegreen") boxplot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/Elisey", "red") boxplot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/BOBA", "magenta") boxplot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/Nika", "pink") boxplot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/Sasha", "orange") plot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/Christine", "blue") scores_BIG = ax.boxplot(scores_big, patch_artist=True, tick_labels=name) # Применяем цвета к каждому ящику for patch, color in zip(scores_BIG['boxes'], colors): patch.set_facecolor(color) ax.set(xlabel='№', ylabel='score') ax.grid() ax.legend() ax.set_title("Scores of students in dummy simulation") plt.show() #path.split('/')[-1]