我有一个 Seaborn 面网格,有多个 4 行 2 列。我想将线图从融化的数据框(具有 4 个变量和 2 个猫)映射到网格上,并将误差线应用于前三行,但不是最后一行(它基于布尔数据,误差线不合适)。
使用示例数据集:
import seaborn as sns
fmri = sns.load_dataset('fmri')
gg = sns.FacetGrid(data=fmri, col="region", row="event")
gg.map(sns.lineplot, "timepoint", "signal", errorbar="sd")
有什么方法可以删除(或首先不绘制)底行的错误栏?
您可以随后通过循环轴来删除错误区域:
import seaborn as sns
fmri = sns.load_dataset('fmri')
gg = sns.FacetGrid(data=fmri, col="region", row="event")
gg.map(sns.lineplot, "timepoint", "signal", errorbar="sd")
for (row, col), ax in gg.axes_dict.items():
if row == 'cue':
ax.collections[0].remove()
或者,您可以将自定义函数映射到构面网格。在该自定义函数内,测试可以检查为该子图提供的 y 值是否类似于布尔值。由于seaborn将所有值转换为相同类型(浮点数),测试唯一y值的数量将是确定所有值都类似于布尔值的一种方法。
自定义函数获取3个参数:
import seaborn as sns
def custom_lineplot(x, y, color):
errorbar = 'sd' if len(y.unique() > 2) else None
sns.lineplot(x=x, y=y, color=color, errorbar=errorbar)
fmri = sns.load_dataset('fmri')
gg = sns.FacetGrid(data=fmri, col="region", row="event")
gg.map(custom_lineplot, "timepoint", "signal")