误差棒可以表示样本标准差,也可以表示样本标准误。
导入库:
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')
