繁体   English   中英

Plot 配对数据使用 seaborn

[英]Plot paired data using seaborn

有没有办法在使用 (x, y) 值配对的 seaborn 时制作散点图? 我希望 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

我认为这有资格作为整洁的数据,但我想要 plot 的单个变量是重量。 我看到的 seaborn 的所有文档都显示了配对数据的示例,例如绘制每个项目的变量 x 与每个项目的变量 y。 例如,sepal_length 与 sepal_width。 但是我怎么可能 plot 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']

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

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

另一种方法

Pivot dataframe;

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


df2.reset_index(drop=True, inplace=True)

Plot 散射

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM