Python 如何解决FaceGrid不';你没有样式参数吗?

Python 如何解决FaceGrid不';你没有样式参数吗?,python,seaborn,Python,Seaborn,我不知道如何在映射到lineplot的seabornFaceGrid中同时改变色调和风格,但最终还是得到了一个图例。设置: import numpy as np import seaborn as sns # add variables "group" and "stim_order" to the fMRI dataset, for demo purposes df = sns.load_dataset('fmri') df['group'] = df['subject'].map(lambd

我不知道如何在映射到
lineplot
的seaborn
FaceGrid
中同时改变色调和风格,但最终还是得到了一个图例。设置:

import numpy as np
import seaborn as sns
# add variables "group" and "stim_order" to the fMRI dataset, for demo purposes
df = sns.load_dataset('fmri')
df['group'] = df['subject'].map(lambda subj: int(subj.lstrip('s')) % 2)
df['stim_order'] = df['subject'].map({subj: np.random.choice([0, 1])
                                      for subj in df['subject'].unique()})
以下是理想的,但没有实现(
FaceGrid
没有“样式”参数):

下一种方法也不起作用,因为传递给
FaceGrid.map()
的KWARG不能引用数据中的列:

g = sns.FacetGrid(data=df, row='region', col='event', hue='group')
g.map(sns.lineplot, 'timepoint', 'signal', style='stim_order')
# fails with ValueError: Could not interpret input 'stim_order'
我可以通过在设置
FaceGrid
时不指定“色调”,并在数据中添加一个新的列“大小”来克服这些限制,这样我就可以将所有与数据相关的参数作为位置参数传递。但我没有得到任何传说:

df['size'] = 1
g = sns.FacetGrid(data=df, row='region', col='event')
g.map(sns.lineplot, 'timepoint', 'signal', 'group', 'size', 'stim_order')


有没有一种方法可以得到这样一个图,但是它有一个简短的
图例
,包含
色调
风格
映射?

我找到了一种方法,这种方法有点可行,但需要调整
子图调整
bbox\u to\u锚定
数字,与图形大小一致:

import numpy as np
import seaborn as sns
# add variables "group" and "stim_order" to the fMRI dataset, for demo purposes
df = sns.load_dataset('fmri')
df['group'] = df['subject'].map(lambda subj: int(subj.lstrip('s')) % 2)
df['stim_order'] = df['subject'].map({subj: np.random.choice([0, 1])
                                      for subj in df['subject'].unique()})

df['size'] = 1
g = sns.FacetGrid(data=df, row='region', col='event')
g.map(sns.lineplot, 'timepoint', 'signal', 'group', 'size', 'stim_order')

g.fig.subplots_adjust(right=0.75)
g.axes[-1, -1].legend(loc='center left', bbox_to_anchor=(1.05, 1))

但是,它为“size”引入了一个不必要的图例元素,该元素不应该存在,因为size并没有真正映射到任何东西(在数据集中它总是1,只是作为一种解决方法映射)

import numpy as np
import seaborn as sns
# add variables "group" and "stim_order" to the fMRI dataset, for demo purposes
df = sns.load_dataset('fmri')
df['group'] = df['subject'].map(lambda subj: int(subj.lstrip('s')) % 2)
df['stim_order'] = df['subject'].map({subj: np.random.choice([0, 1])
                                      for subj in df['subject'].unique()})

df['size'] = 1
g = sns.FacetGrid(data=df, row='region', col='event')
g.map(sns.lineplot, 'timepoint', 'signal', 'group', 'size', 'stim_order')

g.fig.subplots_adjust(right=0.75)
g.axes[-1, -1].legend(loc='center left', bbox_to_anchor=(1.05, 1))