💄 Adds colors to violins

This commit is contained in:
Daniel Svitan 2024-12-27 15:10:37 +01:00
parent ab0d117c70
commit dc2e417969

View File

@ -15,6 +15,9 @@ args = parser.parse_args()
graph = args.graph graph = args.graph
save = args.save save = args.save
colors = ["lightblue", "lightgreen", "lightcoral"]
edge_colors = ["blue", "green", "red"]
# source: mostly ChatGPT (ain't no way i'm writing this shit myself) # source: mostly ChatGPT (ain't no way i'm writing this shit myself)
def analyze(name: str, data: List[np.ndarray]): def analyze(name: str, data: List[np.ndarray]):
@ -81,12 +84,12 @@ def analyze(name: str, data: List[np.ndarray]):
p_value = posthoc_results.loc[idx1 + 1, idx2 + 1] p_value = posthoc_results.loc[idx1 + 1, idx2 + 1]
results.append({ results.append({
"Group 1": group1, "Skupina 1": group1,
"Group 2": group2, "Skupina 2": group2,
"Effect Size": f"{effect_size:.4f}", "Veľkosť účinku": f"{effect_size:.4f}",
"Mean Difference": f"{mean_diff:.4f}", "Rozdiel priemerov": f"{mean_diff:.4f}",
"Median Difference": f"{median_diff:.4f}", "Rozdiel mediánov": f"{median_diff:.4f}",
"Post-Hoc p-value": f"{p_value:.4f}" "Post-Hoc p-hodnota": f"{p_value:.4f}"
}) })
results_df = pd.DataFrame(results, dtype="object") results_df = pd.DataFrame(results, dtype="object")
@ -113,18 +116,27 @@ def plot_violin(data, labels, Fs, ps, title):
index = j * 2 + k index = j * 2 + k
step = 1 if index > 0 else 0.5 step = 1 if index > 0 else 0.5
axs[j, k].violinplot(data[index], showmedians=True, showmeans=True) parts = axs[j, k].violinplot(data[index], showmedians=True, showmeans=True)
axs[j, k].set_title(grade_names[index]) axs[j, k].set_title(grade_names[index])
axs[j, k].set_xlabel(title, fontweight="bold") axs[j, k].set_xlabel(title, fontweight="bold")
axs[j, k].set_ylabel(grade_name_labels[index], fontweight="bold") axs[j, k].set_ylabel(grade_name_labels[index], fontweight="bold")
axs[j, k].set_xticks(np.arange(1, len(labels) + 1), labels=labels) axs[j, k].set_xticks(np.arange(1, len(labels) + 1), labels=labels)
axs[j, k].set_yticks(np.arange(1, 5.01, step)) axs[j, k].set_yticks(np.arange(1, 5.01, step))
parts["cmeans"].set_color("red")
parts["cmedians"].set_color("green")
for i, part in enumerate(parts["bodies"]):
part.set_facecolor(colors[i % len(colors)])
part.set_edgecolor(edge_colors[i % len(edge_colors)])
F = round(Fs[index], 2) F = round(Fs[index], 2)
p = round(ps[index], 4) p = round(ps[index], 4)
axs[j, k].text(0.01, 0.99, f"F-stat: {F:.2f}\np-val: {p:.4f}", ha="left", va="top", axs[j, k].text(0.01, 0.99, f"F-stat: {F:.2f}\np-val: {p:.4f}", ha="left", va="top",
transform=axs[j, k].transAxes, transform=axs[j, k].transAxes,
fontweight="bold") fontweight="bold")
axs[j, k].text(0.99, 0.99, f"Na ľavo - priemer (červená)\nNa pravo - medián (zelená)", ha="right", va="top",
transform=axs[j, k].transAxes)
medians = list([np.median(a) for a in data[index]]) medians = list([np.median(a) for a in data[index]])
means = list([a.mean() for a in data[index]]) means = list([a.mean() for a in data[index]])
@ -132,8 +144,8 @@ def plot_violin(data, labels, Fs, ps, title):
median = round(medians[l], 2) median = round(medians[l], 2)
mean = round(means[l], 2) mean = round(means[l], 2)
# left - mean, right - median # left - mean, right - median
axs[j, k].text(l + 1.13, median - 0.05, f"{median}") axs[j, k].text(l + 1.13, median - 0.05, f"{median}", color="green")
axs[j, k].text(l + 0.90 - len(labels) * 0.065, mean - 0.05, f"{mean}") axs[j, k].text(l + 0.90 - len(labels) * 0.065, mean - 0.05, f"{mean}", color="red")
fig.tight_layout() fig.tight_layout()
if save != "": if save != "":