[英]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.