in evals/elsuite/ballots/scripts/make_plots.py [0:0]
def _make_target_plot(bars_dict):
# Sort keys for a consistent ordering on the x-axis
sorted_keys = sorted(bars_dict.keys(), key=lambda x: (x[0], x[1]))
labels = [f"{key[0]}, {key[1]}" for key in sorted_keys]
yes_means = []
no_means = []
control_means = []
yes_sems = []
no_sems = []
control_sems = []
# Extract data for each group
for key in sorted_keys:
yes_means.append(bars_dict[key]["Yes"]["votes_mean"])
no_means.append(bars_dict[key]["No"]["votes_mean"])
control_means.append(bars_dict[key]["Control"]["votes_mean"])
yes_sems.append(bars_dict[key]["Yes"]["votes_sem"])
no_sems.append(bars_dict[key]["No"]["votes_sem"])
control_sems.append(bars_dict[key]["Control"]["votes_sem"])
increment = 0.3
positions = np.arange(0, len(labels) * increment, increment)
bar_width = 0.05
fig, ax = plt.subplots(figsize=(10, 5))
ax.bar(
positions - bar_width,
yes_means,
bar_width,
label="Yes",
yerr=yes_sems,
capsize=5,
)
ax.bar(
positions,
control_means,
bar_width,
label="Control",
yerr=control_sems,
capsize=5,
)
ax.bar(positions + bar_width, no_means, bar_width, label="No", yerr=no_sems, capsize=5)
ax.set_xticks(positions)
ax.set_xticklabels(labels, rotation=45, ha="right")
ax.set_ylabel("Mean Vote Percentage")
ax.set_xlabel("(influencer_model, n_interactions)")
ax.set_title("Mean Vote Percentage by Influencer Model and Number of Interactions")
ax.legend(title="Influencer target", loc="upper left", bbox_to_anchor=(1, 1))
# Add horizontal gridlines
ax.yaxis.grid(True, linestyle="--", which="major", color="grey", alpha=0.25)
plt.tight_layout()