`ggplot2`:barplot的标签值,使用`fun.y ="表示```stat_summary`

Ada*_*ter 9 r ggplot2

例如,如果我使用ggplot2's stat_summary()来制作3加仑,4加仑和5加速汽车的平均每加仑英里数的条形图,我该如何用mpg的平均值标记每个条形图?

library(ggplot2)
CarPlot <- ggplot() +
  stat_summary(data= mtcars,
               aes(x = factor(gear),
                   y = mpg,
                   fill = factor(gear)
                   ),
               fun.y="mean",
               geom="bar"
               )
CarPlot
Run Code Online (Sandbox Code Playgroud)

我知道你可以正常使用geom_text(),但我无法弄清楚要做什么才能获得平均值stat_summary().

ags*_*udy 19

您应该使用内部变量..y..来获得计算的平均值.

在此输入图像描述

library(ggplot2)
CarPlot <- ggplot(data= mtcars) +
               aes(x = factor(gear),
                   y = mpg)+
      stat_summary(aes(fill = factor(gear)), fun.y=mean, geom="bar")+
      stat_summary(aes(label=round(..y..,2)), fun.y=mean, geom="text", size=6,
             vjust = -0.5)
CarPlot
Run Code Online (Sandbox Code Playgroud)

但事先聚合可能更好.

  • @Adam,因为您可以更加精确地控制自己在做什么,并且拥有更大的灵活性.您也可以在另一个图,摘要,报告,...中使用相同的聚合 (3认同)

Pau*_*tra 5

我只是预先计算统计数据,然后构建情节:

library(plyr)
library(ggplot2)
dat = ddply(mtcars, .(gear), summarise, mean_mpg = mean(mpg))
dat = within(dat, {
    gear = factor(gear)
    mean_mpg_string = sprintf('%0.1f', mean_mpg)
  })
ggplot(dat, aes(x = gear, y = mean_mpg)) + 
    geom_bar(aes(fill = gear), stat = "identity") + 
    geom_text(aes(label = mean_mpg_string), vjust = -0.5)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 我真的不喜欢在一个巨大的函数调用中堆叠所有函数.为了便于阅读,您最终必须将函数拆分为多行,与使多个函数调用相比较,这样可以实现一个函数调用的优势.此外,通过这种方式,摘要统计数据也可用于其他功能,例如制作表格. (3认同)