58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Generate comparison bar chart.
|
|
"""
|
|
|
|
import json
|
|
import matplotlib
|
|
|
|
matplotlib.use("Agg")
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
def load_statistics():
|
|
with open("results/statistics.json", "r") as f:
|
|
return json.load(f)
|
|
|
|
|
|
def main():
|
|
stats = load_statistics()
|
|
|
|
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
|
|
|
|
algorithms = ["gradient", "flooding", "random"]
|
|
colors = ["#2E86AB", "#E94F37", "#7D8491"]
|
|
|
|
metrics = [
|
|
("pdr", "PDR (%)"),
|
|
("airtime_usage_percent", "Airtime (%)"),
|
|
("tx_per_success", "TX/Success"),
|
|
]
|
|
|
|
for idx, (metric, label) in enumerate(metrics):
|
|
ax = axes[idx]
|
|
values = [stats[a][metric]["mean"] for a in algorithms]
|
|
errors = [stats[a][metric]["ci_95"] for a in algorithms]
|
|
|
|
bars = ax.bar(
|
|
algorithms, values, yerr=errors, color=colors, capsize=5, alpha=0.8
|
|
)
|
|
ax.set_ylabel(label, fontsize=11)
|
|
ax.set_title(label, fontsize=12)
|
|
ax.grid(True, alpha=0.3, axis="y")
|
|
|
|
# Add value labels
|
|
for i, (bar, val, err) in enumerate(zip(bars, values, errors)):
|
|
ax.text(
|
|
i, val + err + 0.5, f"{val:.1f}", ha="center", va="bottom", fontsize=10
|
|
)
|
|
|
|
plt.tight_layout()
|
|
plt.savefig("figures/comparison_bar.pdf", dpi=300)
|
|
plt.savefig("figures/comparison_bar.png", dpi=150)
|
|
print("Saved: figures/comparison_bar.pdf")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|