如何为 Seaborn Facet Plot 添加标题

Posted

技术标签:

【中文标题】如何为 Seaborn Facet Plot 添加标题【英文标题】:How to add a title to Seaborn Facet Plot 【发布时间】:2015-07-01 01:30:47 【问题描述】:

如何为这个 Seaborne 情节添加标题?让我们给它一个标题“I AM A TITLE”。

tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="sex", row="smoker", margin_titles=True)
g.map(sns.plt.scatter, "total_bill", "tip")

【问题讨论】:

【参考方案1】:

稍作更新,使用 seaborn 0.11.1:

Seaborn 的 relplot 函数创建了一个 FacetGrid,并为每个子图提供了自己的解释性标题。您可以在整个内容上添加标题:

import seaborn as sns
tips = sns.load_dataset('tips')

rp = sns.relplot(data=tips, x='total_bill', y='tip',
                 col='sex', row='smoker',
                 kind='scatter')
# rp is a FacetGrid; 
# relplot is a nice organized way to use it

rp.fig.subplots_adjust(top=0.9) # adjust the Figure in rp
rp.fig.suptitle('ONE TITLE FOR ALL')

如果您直接创建 FacetGrid,就像在原始示例中一样,它会自动添加列和行标签,而不是单独的子图标题。我们仍然可以为整个内容添加标题:

from matplotlib.pyplot import scatter as plt_scatter
g = sns.FacetGrid(tips, col='sex', row='smoker', 
                  margin_titles=True)
g.map(plt_scatter, 'total_bill', 'tip')
g.fig.subplots_adjust(top=0.9)
g.fig.suptitle('TITLE!')

FacetGrid 对象是使用 matplotlib 图对象构建的,因此我们可以使用通常从 matplotlib 中熟悉的subplots_adjustsuptitle

【讨论】:

这对我有用,但我必须使用 plt.subplots_adjust(top=0.8) 而不是 top=0.9 suptitle 也有一个 y 参数。这对我有用:g.fig.suptitle('foo', y=1.05) 如果你使用col_wrap 这不起作用,那么图形和最后一个轴子图(右下角)将继承相同的标题。 而不是摆弄subplots_adjust() 的边距,只需经常调用plt.tight_layout() 就可以很好地为您完成这项工作:)【参考方案2】:
g.fig.subplots_adjust(top=0.9)
g.fig.suptitle('Title', fontsize=16)

更多信息在这里:http://matplotlib.org/api/figure_api.html

【讨论】:

【参考方案3】:

在 ipython 笔记本中,这对我有用!

sns.plt.title('YOUR TITLE HERE')

【讨论】:

我试过了,它在右下角的图中添加了一个标题,而不是整个图 通过 sns 包访问 plt 已在 0.8.1 中弃用。这应该使用plt.title('YOUR TITLE HERE') 来完成 AttributeError: 模块 'seaborn' 没有属性 'plt' AttributeError: 模块 'seaborn' 没有属性 'plt' @xApple & @seralouk: import matplotlib.pyplot as plt【参考方案4】:

对我有用的是:

sns.plt.suptitle('YOUR TITLE HERE')

【讨论】:

AttributeError: 模块“seaborn”没有属性“plt” AttributeError: 模块“seaborn”没有属性“plt” 虽然如果 seaborn 公开了它的 matplotlib 导入,这个 可以 工作,但依靠另一个包为您导入依赖项是非常糟糕的做法。您应该在代码中添加import matplotlib.pyplot as plt 并直接使用plt.suptitle【参考方案5】:

使用sns.plt.title()sns.plt.suptitle() 的答案不再有效。

相反,你需要使用matplotlib的title()函数:

import matplotlib.pyplot as plt
sns.FacetGrid(<whatever>)
plt.title("A title")

【讨论】:

这并没有为我设置正确的位置。 你试过plt.suptitle()吗? 您的答案不起作用,因为它会影响最后一个轴子图的标题(右下角)。您的建议plt.suptitle() 也修改了最后一个轴以及主图。【参考方案6】:
plt.suptitle("Title") 

plt.title("Title")

这对我有用。

【讨论】:

第二个解决方案不起作用,而第一个解决方案创建了一个丑陋的字幕和构面标题。您需要使用坐标。【参考方案7】:

标题不会与子图标题居中对齐。 要设置标题的位置,您可以使用 plt.suptitle("Title", x=center)

就我而言,我的子图位于 2x1 网格中,因此我可以使用 bbox = g.axes[0,0].get_position()找到边界框然后center=0.5*(bbox.x1+bbox.x2)

【讨论】:

以上是关于如何为 Seaborn Facet Plot 添加标题的主要内容,如果未能解决你的问题,请参考以下文章

如何为我的数据类型使用 Facet Grid

seaborn使用jointplot函数为散点图添加边缘图为散点图添加边缘直方图(Marginal Plot in Python with Seaborn jointplot)

如何为图形级功能编辑 seaborn 图例标题和标签

Python使用seaborn可视化分组条形图并且在分组条形图的条形上添加数值标签(seaborn grouped bar plot add labels)

使用 seaborn 绘图时,如何为色调参数指定多个变量?

如何为 seaborn 的热图或相关矩阵设置动画?