【问题标题】:Plot paired data using seaborn使用 seaborn 绘制配对数据
【发布时间】:2020-04-29 14:03:31
【问题描述】:

有没有办法在使用 seaborn 时制作散点图,其中 (x, y) 值是配对的?我希望 x 轴代表条件 A 下的值,y 轴代表条件 B 下的值。具体来说,假设 x 轴是治疗前的患者体重,y 轴是治疗后的患者体重。我的数据格式如下:

df = pd.DataFrame(
    {'n': [1, 2, 3, 1, 2, 3], 
    'treatment': ['before', 'before', 'before', 'after', 'after', 'after'], 
    'weight': np.random.rand(6)})

   n treatment    weight
0  1    before  0.431438
1  2    before  0.053631
2  3    before  0.567058
3  1     after  0.324254
4  2     after  0.624151
5  3     after  0.519498

我认为这符合整洁的数据,但我想要绘制的单个变量是重量。我为 seaborn 看到的所有文档都显示了配对数据的示例,例如绘制每个项目的变量 x 与每个项目的变量 y。例如,sepal_length 与 sepal_width。但是,如果我的 x 和 y 来自同一列,我该如何绘制 x 与 y?

解决方案是否可以重新格式化我的数据,以便我有一个 weight_before 和一个 weight_after 列?如果是这样,您能否提供使用 pandas 修改数据的最简洁方法?我知道我可以执行以下操作,但我觉得这不是很好的语法。

df['weight_before'] = df['weight']
df.loc[df['treatment'] != 'before', 'weight_before'] = np.nan
# and similar for df['weight_after']

【问题讨论】:

    标签: python pandas seaborn


    【解决方案1】:

    如果我正确理解您的问题,这可能对您有用:

    sns.lmplot(data=df.pivot(index='n', columns='treatment', values='weight'),
               x='before', y='after', fit_reg=False)
    

    【讨论】:

      【解决方案2】:

      另一种方法

      旋转数据框;

      df2=pd.pivot_table(df, index='n',columns='treatment', values='weight', aggfunc=np.sum)
      
      
      df2.reset_index(drop=True, inplace=True)
      

      绘制散点图

      ax = sns.scatterplot(x="before", y="after",data=df2)
      

      链式解决方案

      ax = sns.scatterplot(x="before", y="after",data=pd.pivot_table(df, index='n',columns='treatment', values='weight', aggfunc=np.sum).reset_index(drop=True))
      

      【讨论】:

        猜你喜欢
        • 2020-06-22
        • 1970-01-01
        • 2018-07-05
        • 2014-05-12
        • 2016-05-12
        • 1970-01-01
        • 2020-08-24
        • 1970-01-01
        • 2015-12-31
        相关资源
        最近更新 更多