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
相关产品推荐
相关产品推荐

