Seaborn displot 'FacetGrid' 对象不可调用

Posted

技术标签:

【中文标题】Seaborn displot \'FacetGrid\' 对象不可调用【英文标题】:Seaborn displot 'FacetGrid' object is not callableSeaborn displot 'FacetGrid' 对象不可调用 【发布时间】:2021-12-22 01:38:54 【问题描述】:

为了用 seaborn 绘制一个 2x2 的分布图,我编写了以下代码:

df = pd.DataFrame(
    'Re'    : x,
     'n'     : y,
     'Type'  : tp,
     'tg'    : tg,
     'gt'    : gt
    )

g = sns.FacetGrid(df, row='gt', col='tg', margin_titles=False, height=2.5, aspect=1.65)
g.map(sns.displot(df, x='Re', y='n', hue='Type', kind='kde',log_scale=True, palette=customPalette, fit_reg=False, x_jitter=.1))

但是我得到了这个我无法修复的错误:

func(*plot_args, **plot_kwargs)

TypeError: 'FacetGrid' object is not callable

df中导入的x、y、tp、tg、gt是列表。

有没有人知道我可以做些什么来解决这个问题? 先感谢您! :)

*这是df的样子: [1]:https://i.stack.imgur.com/H6J9c.png

【问题讨论】:

不,我没有这样的东西......在代码的前面,我只是阅读了列表,这就是我不提供那部分的原因。对不起 那么请提供minimal reproducible example和完整的错误回溯 @JohanC 当然!没有 g.map 的 sns.displot 可以正常工作! 【参考方案1】:

好吧,sns.displot已经是FacetGrid。您不能将其作为参数提供给g.map。此外,g.map 的参数意味着是一个不对其进行评估的函数(因此,没有括号,并且参数作为g.map 的参数给出)。请参阅Seaborn's FacetGrid page 中的示例。

最常用的FacetGrid参数(如rowcolheightaspect)可以直接提供给sns.displot()。不太常见的参数进入facet_kws=...

这是一个例子:

from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

df = pd.DataFrame('Re': np.random.rand(100),
                   'n': np.random.rand(100),
                   'Type': np.random.choice([*'abc'], 100),
                   'tg': np.random.choice(['ETG', 'LTG'], 100),
                   'gt': np.random.randint(0, 2, 100))
g = sns.displot(df, x='Re', y='n', hue='Type', kind='kde',
                row='gt', col='tg', height=2.5, aspect=1.65,
                log_scale=True, palette='hls',
                facet_kws='margin_titles': False)
plt.show()

要直接使用FacetGrid(不推荐),您可以创建一个类似的情节:

g = sns.FacetGrid(df, row='gt', col='tg', hue='Type', palette='hls',
                  margin_titles=False, height=2.5, aspect=1.65)
g.map_dataframe(sns.kdeplot,
                x='Re', y='n',
                log_scale=True)
g.add_legend()

【讨论】:

非常感谢! :)

以上是关于Seaborn displot 'FacetGrid' 对象不可调用的主要内容,如果未能解决你的问题,请参考以下文章

在 seaborn displot/histplot 函数中绘制高斯拟合直方图(不是 distplot)

如何使用 displot 在 python 中制作 seaborn 图,在其中我们计算一个字段中的唯一值而不是总行数?

seaborn可视化displot绘制直方图(histogram)并通过axvline函数在直方图中添加均值(mean)竖线(自定义均值竖线色彩)

seaborn可视化displot绘制直方图(histogram)并通过axvline函数在直方图中添加中位数(median)竖线(自定义中位数竖线的线条形式)

seaborn使用displot函数实现多面板直方图(Multi-panel)可视化:使用set_title函数自定义设置多面板直方图标题(Multi-panel histograms’ title)

seaborn使用axes_dict函数获取displot函数生成的图像所有标题信息使用set_title函数自定义设置多面板直方图标题(Multi-panel histogram‘s title)