Spaces:
Configuration error
Configuration error
| import json | |
| import argparse | |
| import matplotlib.pyplot as plt | |
| import os | |
| def main(): | |
| parser = argparse.ArgumentParser(description="Plot accuracy per CWE type.") | |
| parser.add_argument("--input", type=str, default="eval_results.json", help="Path to evaluation results JSON") | |
| parser.add_argument("--output", type=str, default="plots/per_cwe.png", help="Path to save the plot") | |
| args = parser.parse_args() | |
| if not os.path.exists(args.input): | |
| print(f"Error: Input file {args.input} not found.") | |
| return | |
| with open(args.input, "r") as f: | |
| data = json.load(f) | |
| cwe_breakdown = data.get("summary", {}).get("cwe_breakdown", {}) | |
| if not cwe_breakdown: | |
| print("No CWE breakdown found in the results.") | |
| return | |
| cwes = list(cwe_breakdown.keys()) | |
| accuracies = [stats["accuracy"] for stats in cwe_breakdown.values()] | |
| counts = [stats["count"] for stats in cwe_breakdown.values()] | |
| plt.figure(figsize=(12, 6)) | |
| bars = plt.bar(cwes, accuracies, color='skyblue', edgecolor='navy') | |
| # Add counts on top of bars | |
| for i, bar in enumerate(bars): | |
| yval = bar.get_height() | |
| plt.text(bar.get_x() + bar.get_width()/2, yval + 0.01, f'n={counts[i]}', ha='center', va='bottom') | |
| plt.xlabel('CWE Type') | |
| plt.ylabel('Accuracy') | |
| plt.title('CommitGuard — Accuracy per CWE Type') | |
| plt.ylim(0, 1.1) | |
| plt.grid(axis='y', linestyle='--', alpha=0.7) | |
| plt.xticks(rotation=45) | |
| plt.tight_layout() | |
| os.makedirs(os.path.dirname(args.output), exist_ok=True) | |
| plt.savefig(args.output) | |
| print(f"Plot saved to {args.output}") | |
| if __name__ == "__main__": | |
| main() | |