如何用Plotnine创建含几何均值、均值、最值的分类柱状图
计算分组统计指标并绘制Plotnine柱状图
1. 统计指标计算
通过pandas分组计算每个X类别的几何均值、均值、最大值、最小值,其中几何均值借助scipy.stats.gmean实现:
import pandas as pd from scipy.stats import gmean # 构造数据集 data = pd.DataFrame({ 'X': ['A1', 'A1', 'A1', 'A1', 'A2', 'A2', 'A2', 'A2', 'A3', 'A3', 'A3', 'A3'], 'B': ['b1', 'b2', 'b3', 'b4', 'b1', 'c1', 'c2', 'b3', 'b4', 'b5', 'b1', 'b3'], 'Y': [4, 2, 3, 8, 7, 10, 8, 7, 10, 9, 4, 1] }) # 分组计算四项统计指标 stats_df = data.groupby('X')['Y'].agg( 几何均值=gmean, 均值='mean', 最大值='max', 最小值='min' ).reset_index() # 转换为长格式,适配Plotnine绘图需求 stats_long = stats_df.melt(id_vars='X', var_name='统计指标', value_name='数值')
计算得到的统计结果:
| X | 几何均值 | 均值 | 最大值 | 最小值 |
|---|---|---|---|---|
| A1 | 3.634241 | 4.25 | 8 | 2 |
| A2 | 8.031129 | 8.0 | 10 | 7 |
| A3 | 3.936497 | 6.0 | 10 | 1 |
2. Plotnine柱状图绘制
使用Plotnine创建分组柱状图,样式匹配示例图(每个X类别下展示4个统计指标的柱子,不同指标用颜色区分):
from plotnine import ggplot, aes, geom_col, labs, theme_minimal, theme, element_text, position_dodge # 构建绘图对象 plot = ( ggplot(stats_long, aes(x='X', y='数值', fill='统计指标')) + geom_col(position=position_dodge(width=0.8), width=0.7) + labs(title='各X类别统计指标对比', x='X类别', y='数值', fill='统计指标') + theme_minimal() + theme( title=element_text(size=14, face='bold'), axis_title=element_text(size=12), legend_title=element_text(size=12), axis_text=element_text(size=10) ) ) # 展示图表 print(plot)
绘图细节说明:
- 用
position_dodge实现分组柱子并排展示,避免重叠 - 选用
theme_minimal作为基础主题,贴合示例图的简洁风格 - 调整标题、坐标轴文本的大小与样式,提升图表可读性
- 通过
fill参数区分不同统计指标,自动生成对应图例
内容的提问来源于stack exchange,提问作者kanna
相关产品推荐
相关产品推荐

