Seaborn displot 'FacetGrid' 对象不可调用
Seaborn displot 'FacetGrid' object is not callable
为了用 seaborn 绘制一个 2x2 displot,我写了下面的代码:
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
嗯,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 绘制一个 2x2 displot,我写了下面的代码:
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
嗯,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()