Wie zeichnet man Y-Achse-Titel dynamisch mit Vorlagenansatz in Seeborn FacetGrid
Posted: 12 Mar 2025, 13:56
Ich habe einen Datenrahmen mit einer Spalte mit zwei Arten von Metriken. Ich habe es mit Seeborn.Facetgrid aufgetragen und eine Metrik pro Zeile festgelegt. Mein Ziel ist es, das y-Achse-Etikett für jede Facette um die entsprechende Metrik umzubenennen.
Ich möchte jedoch wissen, ob es eine Methode innerhalb von Seeborns FacetGrid gibt-ähnlich zu set_titles mit dem Vorlagenargument, um die y-axis-Bezeichnungen direkt zu modifizieren.>
Code: Select all
import pandas as pd
import numpy as np
import seaborn as sns
# Generate random data
categories = [1] * 5 + [2] * 5
n = len(categories) # Number of rows
data = {
"model": np.random.choice(categories, size=n, replace=False), # 1 = RF, 2 = SVM
"metric": np.random.choice(categories, size=n, replace=False), # 1 = kappa, 2 = accuracy
"predictors": np.random.choice(categories, size=n, replace=False),
"value": np.random.uniform(0.7, 1, size=n)
}
# Convert to DataFrame
df = pd.DataFrame(data)
# Replace numerical categories with text labels
df["model"] = df["model"].map({1: "RF", 2: "SVM"}).astype("category")
df["metric"] = df["metric"].map({1: "kappa", 2: "accuracy"}).astype("category")
g = sns.FacetGrid(df, col="model", row="metric", hue="predictors", palette="tab10")
g.map(sns.barplot, "predictors", "value", legend=True, order=sorted(df['predictors']))
g.set_axis_labels(x_var="Predictors ID")
g.set_titles(template="{row_name}, {col_name}")
g.add_legend()
< /code>
Ich weiß, dass, wie in diesem Beitrag erwähnt, die Beschriftungen durch Zugriff auf Matplotlib-Optionen geändert werden können.for i, model in enumerate(np.sort(pd.unique(df["metric"]))):
g.axes[i,0].set_ylabel(model)