import pandas as pd import matplotlib.pyplot as plt import numpy as np df = pd.read_csv('experiment_results.csv') mean_times = df.groupby(['Structure', 'Mode'])[['Insert (sec)', 'Search (sec)', 'Delete (sec)']].mean().reset_index() structures = mean_times['Structure'].unique() modes = mean_times['Mode'].unique() fig, axes = plt.subplots(1, 3, figsize=(15, 5)) operations = ['Insert (sec)', 'Search (sec)', 'Delete (sec)'] titles = ['Insertion', 'Search', 'Deletion'] for ax, op, title in zip(axes, operations, titles): x = np.arange(len(structures)) width = 0.35 random_vals = [] sorted_vals = [] for s in structures: random_row = mean_times[(mean_times['Structure'] == s) & (mean_times['Mode'] == 'random')] sorted_row = mean_times[(mean_times['Structure'] == s) & (mean_times['Mode'] == 'sorted')] random_vals.append(random_row[op].values[0] if not random_row.empty else 0) sorted_vals.append(sorted_row[op].values[0] if not sorted_row.empty else 0) ax.bar(x - width/2, random_vals, width, label='Random') ax.bar(x + width/2, sorted_vals, width, label='Sorted') ax.set_xticks(x) ax.set_xticklabels(structures) ax.set_ylabel('Time (seconds)') ax.set_title(title) ax.legend() plt.tight_layout() plt.savefig('performance_comparison.png', dpi=150) plt.show()