import matplotlib matplotlib.use('Agg') # non-GUI backend import matplotlib.pyplot as plt import csv # Read contributors.csv logins = [] commits = [] with open("contributors.csv") as f: reader = csv.DictReader(f) for row in reader: logins.append(row["login"]) commits.append(int(row["commits"])) # Sort contributors by commits descending logins_sorted, commits_sorted = zip(*sorted(zip(logins, commits), key=lambda x: x[1], reverse=True)) # distribution graph plt.figure(figsize=(12,6)) plt.plot(range(1, len(commits_sorted)+1), commits_sorted, marker='o') plt.title("Commit Distribution Among Contributors (numpy/numpy)") plt.xlabel("Contributor Rank") plt.ylabel("Number of Commits") plt.grid(True) plt.tight_layout() plt.savefig("commit_distribution.png") plt.close() # maintainer graph plt.figure(figsize=(12,6)) top_n = 20 plt.bar(range(1, top_n+1), commits_sorted[:top_n], tick_label=logins_sorted[:top_n]) plt.title("Maintainer Concentration (Top 20 Contributors)") plt.xlabel("Contributor") plt.ylabel("Number of Commits") plt.xticks(rotation=45, ha='right') plt.tight_layout() plt.savefig("maintainer_concentration.png") plt.close() print("Graphs generated successfully.")