You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将pandas数据的seaborn pointplot按对照组均值标准化

实现方案

核心思路是先对原数据集的VELOCITY做分组归一化,以每个condition下FRONT细胞类型的VELOCITY均值为基准,再用归一化后的数据绘图即可,不需要修改原绘图逻辑的其他参数。


步骤1:计算归一化后的速度值

你可以选择两种实现方式,效果完全一致:

写法1(可读性更高)

# 计算每个condition下FRONT细胞的VELOCITY均值
front_mean = df_cells[df_cells['CELL TYPE'] == 'FRONT'].groupby('condition')['VELOCITY'].mean().reset_index(name='front_mean_val')
# 把均值匹配回原数据集
df_cells = df_cells.merge(front_mean, on='condition', how='left')
# 生成归一化后的速度:每个速度值除以对应condition的FRONT均值
df_cells['NORMALIZED_VELOCITY'] = df_cells['VELOCITY'] / df_cells['front_mean_val']

写法2(更简洁的单行实现)

df_cells['NORMALIZED_VELOCITY'] = df_cells.groupby('condition')['VELOCITY'].transform(
    lambda x: x / x[df_cells.loc[x.index, 'CELL TYPE'] == 'FRONT'].mean()
)

步骤2:用归一化后的数据绘图

只需要把原绘图代码的y参数替换为新生成的NORMALIZED_VELOCITY列即可,其他参数完全保留:

from matplotlib import pyplot as plt 
import seaborn as sns
import pandas as pd

# 你的示例数据集
df_cells = pd.DataFrame(data = {'VELOCITY':[1.4,1.6,1.3,1.1,0.8,0.7,2.3,1.8,1.7,1.5,1.6,1.7],'condition':['A1','A1','A1','A1','A1','A1','A2','A2','A2','A2','A2','A2'],'CELL TYPE':['FRONT','FRONT','MIDDLE','MIDDLE','BACK','BACK','FRONT','FRONT','MIDDLE','MIDDLE','BACK','BACK']})

# 先执行上面的归一化代码
df_cells['NORMALIZED_VELOCITY'] = df_cells.groupby('condition')['VELOCITY'].transform(
    lambda x: x / x[df_cells.loc[x.index, 'CELL TYPE'] == 'FRONT'].mean()
)

# 绘图
fig, ax = plt.subplots(figsize=(25,12))
sns.pointplot(
    x='CELL TYPE',
    y='NORMALIZED_VELOCITY', 
    hue='condition',
    ci=99,
    data=df_cells,
    ax=ax,
    order=['FRONT', 'MIDDLE', 'BACK'],
    ordered=True
)
# 可选:修改Y轴标签更清晰说明归一化规则
ax.set_ylabel('Normalized Velocity (vs same condition Front mean)')
plt.show()

最终归一化后所有condition的FRONT组均值都会为1,其他组的数值是相对于同condition下FRONT均值的比值,置信区间也会同步按相同比例缩放,完全匹配你需要的点线图样式。

内容的提问来源于stack exchange,提问作者Emanuele Martini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:15:05