如何向Seaborn现有图例中手动添加自定义图例条目
解决方案
不需要创建第二个独立图例,直接把垂直参考线的条目追加到seaborn生成的原有图例中即可,完全省去手动对齐位置的操作,代码如下:
import seaborn as sns import matplotlib.pyplot as plt # 原分布绘制代码无需改动 gfg = sns.displot(hist_dat, x="Outcome", hue="Group", kind="kde", fill = True, palette="tab10", height=10.5, aspect=18.5/10.5, legend=True) gfg._legend.set_title("Group") plt.setp(gfg._legend.get_title(), fontsize=20) # 绘制垂直参考线时,保存返回的线对象 ate_line = plt.axvline(x=0, color='b', label='ATE') # 提取原有图例的句柄和标签 handles = gfg._legend.legend_handles labels = [t.get_text() for t in gfg._legend.texts] # 追加参考线对应的条目 handles.append(ate_line) labels.append('ATE') # 替换原有图例,位置参数和你之前单图例的设置保持一致即可,不需要反复调试对齐 gfg._legend.remove() gfg.ax.legend( handles=handles, labels=labels, bbox_to_anchor=(1.02, 1), loc="upper left", frameon=False, title="Group", title_fontsize=20 )
注意点
- 所有图例条目属于同一个图例容器,不存在两个独立图例错位的问题
- 仅需要在绘制参考线时多保存一步线对象,不需要改动原有绘图逻辑
- 如果想要在图例里区分分组条目和参考线,可以在追加ATE条目之前插入空白占位符调整排版

内容的提问来源于stack exchange,提问作者Metrics_Hannah
相关产品推荐
相关产品推荐

