Ich habe versucht, diese How to make custom legend in matplotlib SO Frage zu folgen, aber ich denke, ein paar Dinge sind in der Übersetzung verloren. Ich habe ein benutzerdefiniertes Farb-Mapping für die verschiedenen Punkteklassen in meinem Plot verwendet und möchte eine Tabelle mit diesen Farb-Label-Paaren erstellen können. Ich habe die Informationen in einem Wörterbuch D_color_label
gespeichert und dann 2 parallele Listen colors
und labels
gemacht. Ich habe versucht, es in der ax.legend
zu verwenden, aber es schien nicht zu funktionieren.Benutzerdefinierte Legende für Seaborn regplot (Python 3)
np.random.seed(0)
# Create dataframe
DF_0 = pd.DataFrame(np.random.random((100,2)), columns=["x","y"])
# Label to colors
D_idx_color = {**dict(zip(range(0,25), ["#91FF61"]*25)),
**dict(zip(range(25,50), ["#BA61FF"]*25)),
**dict(zip(range(50,75), ["#916F61"]*25)),
**dict(zip(range(75,100), ["#BAF1FF"]*25))}
D_color_label = {"#91FF61":"label_0",
"#BA61FF":"label_1",
"#916F61":"label_2",
"#BAF1FF":"label_3"}
# Add color column
DF_0["color"] = pd.Series(list(D_idx_color.values()), index=list(D_idx_color.keys()))
# Plot
fig, ax = plt.subplots(figsize=(8,8))
sns.regplot(data=DF_0, x="x", y="y", scatter_kws={"c":DF_0["color"]}, ax=ax)
# Add custom legend
colors = list(set(DF_0["color"]))
labels = [D_color_label[x] for x in set(DF_0["color"])]
# If I do this, I get the following error:
# ax.legend(colors, labels)
# UserWarning: Legend does not support '#BA61FF' instances.
# A proxy artist may be used instead.