代码之家  ›  专栏  ›  技术社区  ›  arash

seaborn的分组散点图中的样本梯度?

  •  1
  • arash  · 技术社区  · 1 年前

    背景

    在生物学(也许还有其他领域)中,有时你想把“控制”和“治疗”条件之间的区别可视化。通常,人们会从每个条件中收集几个样本,并并排绘制分布图、散点图或群体图。在这种情况下,由于样本是独立的,因此可以提取的只是总体分布变化。

    但有时,凭借明智的实验设置,同一个样本点可以同时经历这两种条件。因此,人们可以直接评估每个样本的“治疗”效果,并检查他/她关于治疗的假设是否均匀地应用于所有样本。我在文学作品中经常看到这样一个富有洞察力的情节:

    enter image description here

    问题

    我想知道是否有办法用seaborn来绘制这样的情节。 Boxplot 是我遇到的最相似的东西。但它缺少两个特点:

    1. 它只散布异常值(而不是所有样本)
    2. 未绘制所有组的相邻类别之间的渐变线

    有简单的方法来做这两件事吗?任何想法都将不胜感激。

    1 回复  |  直到 1 年前
        1
  •  1
  •   mozway    1 年前

    假设有这样一个例子:

    import seaborn as sns
    
    df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                       'B': [1, 2, 4, 6, 7]})
    
    ax = sns.boxplot(df)
    

    输出

    enter image description here

    你可以 transpose 您的DataFrame, reset_index 并覆盖折线图:

    import seaborn as sns
    
    df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                       'B': [1, 2, 4, 6, 7]})
    
    ax = sns.boxplot(df)
    
    (df.T.reset_index(drop=True)
       .plot(marker='o', ls=':', color='k', legend=False, ax=ax)
    )
    

    输出

    enter image description here