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
参数(如row
、col
、height
和aspect
)可以直接提供给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)