在 Seaborn 的基于 FacetGrid 的线图中,想更改标签标题。看似简单的事情,结果却成了一件毛骨悚然的事
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col= 'day', legend_out= True,)
g.map(sns.lineplot, 'total_bill', 'tip', 'sex', 'time',
ci = False)
g.fig.legend()
我想通过添加“标题”参数将标签标题从“性别”更改为“性别”。但事实证明,成为现有标题之上的标题
g.add_legend(title = 'Gender')
legend title 'sex' with headline 'Gender'
我也尝试访问 fig.legend 来更改文本,但现在它显示了多个图例,可能是由于多面图。
l = g.fig.legend()
l.texts[0].set_text('Gender')
legend title 'Gender', however, with multiple legends
我确信可能有一种“hacky”的方法可以通过更改数据中的变量名称来更改名称,但我想知道是否有一种方法可以简单地替换 Seabron FacetGrid 的图例标题,或者,如果它不可能,通过“fig.legend”添加标题,同时显示单个相关图例。非常感谢!
请您参考如下方法:
使用 FacetGrid.add_legend()
方法添加图例后,您可以直接访问底层的 matplotlib.legend.Legend
对象,通过链接get_text()
(在本例中是六个元素中的第一个,因此索引为 0,但您同样可以使用索引 3 更改“时间”标签)和 set_text()
方法:
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col= 'day')
g.map(sns.lineplot, 'total_bill', 'tip', 'sex', 'time',
errorbar=('ci', False))
g.add_legend()
g.legend.get_texts()[0].set_text('Gender')
plt.show()