r - 使用 stat_summary 用观察次数注释绘图

标签 r graph plot ggplot2

我如何使用 stat_summaryn = x 标记绘图在哪里x一个变量?这是所需输出的示例:

enter image description here

我可以用这个相当低效的代码制作上面的图:

nlabels <- sapply(1:length(unique(mtcars$cyl)), function(i) as.vector(t(as.data.frame(table(mtcars$cyl))[,2][[i]])))
ggplot(mtcars, aes(factor(cyl), mpg, label=rownames(mtcars))) +
  geom_boxplot(fill = "grey80", colour = "#3366FF") + 
  geom_text(aes(x = 1, y = median(mtcars$mpg[mtcars$cyl==sort(unique(mtcars$cyl))[1]]), label = paste0("n = ",nlabels[[1]]) )) +
  geom_text(aes(x = 2, y = median(mtcars$mpg[mtcars$cyl==sort(unique(mtcars$cyl))[2]]), label = paste0("n = ",nlabels[[2]]) )) +
  geom_text(aes(x = 3, y = median(mtcars$mpg[mtcars$cyl==sort(unique(mtcars$cyl))[3]]), label = paste0("n = ",nlabels[[3]]) )) 

这是这个问题的后续:How to add a number of observations per group and use group mean in ggplot2 boxplot?我可以在哪里使用 stat_summary计算和显示观察次数,但我一直无法找到包含 n = 的方法在 stat_summary输出。好像stat_summary可能是进行此类标记的最有效方法,但欢迎使用其他方法。

最佳答案

您可以在 stat_summary() 中制作自己的函数来使用.这里n_fun计算 y 值的位置为 median()然后添加 label=n= 组成和观察次数。使用 data.frame() 很重要而不是 c()因为 paste0()会产生字符但 y值是数字,但 c()会使两个性格。然后在 stat_summary()使用此功能和 geom="text" .这将确保每个 x 值的位置和标签仅从该级别的数据中生成。

n_fun <- function(x){
  return(data.frame(y = median(x), label = paste0("n = ",length(x))))
}

ggplot(mtcars, aes(factor(cyl), mpg, label=rownames(mtcars))) +
  geom_boxplot(fill = "grey80", colour = "#3366FF") + 
  stat_summary(fun.data = n_fun, geom = "text")

enter image description here

关于r - 使用 stat_summary 用观察次数注释绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15720545/

相关文章:

r - 如何隐藏或禁用pickerInput中的一项选择多项

r - 手动计算接近度并与 R 中的 igraph 包进行比较

r - 向 ggplot 添加一个点会弄乱图例

r - 使用 ggplot2 在 R 上创建地平线图 : show percentage change

r - 将多个参数传递给Reduce

python - 如何限制 matplotlib 图的边框大小?

javascript - 检测浏览器是否支持谷歌图表

python - 将带有子图的 Pandas 图保存到一个文件中

python - 在一个图中组合 pandas groupby 绘制组时如何更改 x 轴

r - 编译 pdf 输出时knitr -pandoc-citeproc 错误