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

Plotnine教程:如何用geom_col和geom_text按组展示均值

在plotnine中自动计算并添加均值标签到柱状图

你可以通过给geom_text()指定stat='summary',让plotnine自动和geom_col()一样按分组计算均值,无需手动执行groupby操作。关键是要让标签的位置和柱子对齐,并正确获取计算后的均值。

修改后的完整代码

import pandas as pd
import numpy as np
from plotnine import *

df = pd.DataFrame({'team': {4: 'Tampa Bay Rays',
  8: 'Tampa Bay Rays',
  85: 'Tampa Bay Rays',
  89: 'Tampa Bay Rays',
  1277: 'League',
  1393: 'League',
  3544: 'League',
  3660: 'League'},
 'inning': {4: 1, 8: 1, 85: 2, 89: 2, 1277: 1, 1393: 1, 3544: 2, 3660: 2},
 'value': {4: 3.0,
  8: 1.0,
  85: 1.0,
  89: 0.0,
  1277: 2.0,
  1393: 0.0,
  3544: 2.0,
  3660: 0.0}})

(ggplot(df, aes(x='inning', y='value', fill='team'))
 + geom_col(stat='summary', position='dodge')
 # 添加自动计算的均值标签
 + geom_text(
     stat='summary',
     position=position_dodge(width=0.9),  # 匹配geom_col默认宽度,保证标签与柱子对齐
     aes(label=round(stat(y), 2)),  # 用stat(y)获取自动计算的均值,保留两位小数
     vjust=-0.5,  # 将标签上移,避免与柱子顶部重叠
     size=10
 )
 + scale_x_continuous(breaks=np.arange(1,10,1)))

关键参数说明

  • stat='summary':让geom_text沿用geom_col的分组统计逻辑,自动按team和inning计算均值
  • position=position_dodge(width=0.9):geom_col默认宽度为0.9,设置相同宽度的dodge确保标签和对应柱子对齐
  • aes(label=round(stat(y), 2)):stat(y)代表统计后得到的均值,用round()优化显示精度
  • vjust=-0.5:调整标签垂直位置,避免和柱子顶部重叠

内容的提问来源于stack exchange,提问作者Larry Burholme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:05:38