stitcher-benchmark/latency/generate_graph.py

57 lines
1.5 KiB
Python
Raw Normal View History

2025-11-17 20:11:26 +07:00
import argparse
import pandas as pd
import matplotlib.pyplot as plt
def main():
parser = argparse.ArgumentParser(description="Generate latency graph from CSV.")
parser.add_argument("--input", required=True, help="Input CSV file")
parser.add_argument("--output", required=True, help="Output PNG path")
parser.add_argument("--user", required=True, help="Username for graph title")
args = parser.parse_args()
# Load CSV
df = pd.read_csv(args.input)
# Convert to float
df["Latency(s)"] = pd.to_numeric(df["Latency(s)"], errors="coerce")
df = df.dropna(subset=["Latency(s)"])
latencies = df["Latency(s)"].values
titles = df["Title"].values
2025-11-19 10:34:38 +07:00
short_titles = [t.split('_')[0] for t in titles]
2025-11-17 20:11:26 +07:00
# Compute average
avg_latency = latencies.mean()
plt.figure(figsize=(14, 6))
# --- Bar chart ---
bars = plt.bar(short_titles, latencies)
# --- Average line ---
plt.axhline(y=avg_latency, linestyle="--")
plt.text(
-0.4, avg_latency,
f"Avg = {avg_latency:.3f}s",
va="bottom",
fontsize=10,
fontweight="bold"
)
# --- Label each bar with exact value ---
for i, value in enumerate(latencies):
plt.text(i, value, f"{value:.3f}", ha="center", va="bottom", fontsize=8)
2025-11-19 10:34:38 +07:00
plt.xlabel("Image Cases")
2025-11-17 20:11:26 +07:00
plt.ylabel("Latency (seconds)")
plt.title(f"Latency Performance of {args.user}")
2025-11-19 10:34:38 +07:00
plt.ylim(1, 300)
2025-11-17 20:11:26 +07:00
plt.tight_layout()
plt.savefig(args.output)
print(f"Graph saved to: {args.output}")
if __name__ == "__main__":
main()