误差棒可以表示样本标准差,也可以表示样本标准误。
导入库:
import pandas as pd
自定义用来绘制带误差棒(样本标准差、样本标准误)的柱状图:
def col(y, x, df, errprbar='std', face=False) :
if not face:
print(ggplot(df.groupby([x])[y]\
.agg(['mean','std', 'sem']).reset_index(),
aes(y='mean', x=x))
+ geom_errorbar(aes(ymin=f'mean - {errprbar}',
ymax=f'mean + {errprbar}'),
width=.2 )
+ geom_col()
+ labs(y=y,x=x)
+ theme_bw()
+ theme(axis_text_x=element_text(angle=45)) )
else:
print(ggplot(df.groupby([x,face])[y]\
.agg(['mean','std', 'sem']).reset_index(),
aes(y='mean', x=x))
+ geom_errorbar(aes(ymin=f'mean - {errprbar}',
ymax=f'mean + {errprbar}'),
width=.2 )
+ geom_col()
+ labs(y=y,x=x)
+ theme_bw()
+ facet_wrap(f' ~ {face}')
+ theme(axis_text_x=element_text(angle=45)) )
导入待分析的df:
df = pd.DataFrame({'age': [25, 30, 35, 40, 45, 27, 33, 38, 42, 50],
'sex': ['Male', 'Female', 'Male', 'Female', 'Male', 'Female', 'Male', 'Female', 'Male', 'Female'],
'group': ['A', 'B', 'A', 'B', 'A', 'A', 'B', 'A', 'B', 'A']})
# df为:
age sex group
0 25 Male A
1 30 Female B
2 35 Male A
3 40 Female B
4 45 Male A
5 27 Female A
6 33 Male B
7 38 Female A
8 42 Male B
9 50 Female A
一、不分面
(一)误差棒表示样本标准差
col('age', 'group', df) # 默认标准差
col('age', 'group', df, errprbar='std', face=False)
# 以上代码输出一样:
(二)误差棒表示样本标准误
col('age', 'group', df, errprbar='sem')
col('age', 'group', df, errprbar='sem', face=False)
二、分面
(一)误差棒表示样本标准差
col('age', 'group', df, face='sex') # 默认误差棒表示样本标准差
col('age', 'group', df, face='sex', errprbar='std')
# 以上代码输出一样:
(二)误差棒表示样本标准误
col('age', 'group', df, face='sex', errprbar='sem')