Я стараюсь следовать этому вопросу How to make custom legend in matplotlib ВОПРОС, но я думаю, что некоторые вещи теряются в переводе. Я использовал настраиваемое цветовое сопоставление для разных классов точек на моем сюжете, и я хочу, чтобы можно было разместить таблицу с этими парами ярлыков цветов. Я сохранил информацию в словаре D_color_label
, а затем сделал 2 параллельных списка colors
и labels
. Я попытался использовать его в ax.legend
, но он, похоже, не работал.Пользовательская легенда для 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.