如何将不同类型的误差区域应用到构面网格的某些子图

问题描述 投票:0回答:1

我有一个 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")

basic facet plot

有什么方法可以删除(或首先不绘制)底行的错误栏?

python pandas seaborn
1个回答
0
投票

删除错误区域

您可以随后通过循环轴来删除错误区域:

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()

mapping seaborn lineplot with and without error region

自定义绘图功能

或者,您可以将自定义函数映射到构面网格。在该自定义函数内,测试可以检查为该子图提供的 y 值是否类似于布尔值。由于seaborn将所有值转换为相同类型(浮点数),测试唯一y值的数量将是确定所有值都类似于布尔值的一种方法。

自定义函数获取3个参数:

  • x 值的 pandas 系列(数据框的列,简化为子图)
  • 对应的 y 值类似
  • 一种颜色
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")
© www.soinside.com 2019 - 2024. All rights reserved.