将样本量添加到箱形图的面板图中 [英] Add sample size to a panel figure of boxplots

查看:239
本文介绍了将样本量添加到箱形图的面板图中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图将样本大小添加到按两个级别分组的箱形图(最好在它们的顶部或底部)。我使用facet_grid()函数生成面板图。然后,我尝试使用annotate()函数添加样本大小,但这无法工作,因为它在第二个面板中重复了这些值。

I am trying to add sample size to boxplots (preferably at the top or bottom of them) that are grouped by two levels. I used the facet_grid() function to produce a panel plot. I then tried to use the annotate() function to add the sample sizes, however this couldn't work because it repeated the values in the second panel. Is there a simple way to do this?

head(FeatherData, n=10)
    Location   Status   FeatherD               Species        ID
## 1        TX Resident  -27.41495         Carolina wren CARW (32)
## 2        TX Resident  -29.17626         Carolina wren CARW (32)
## 3        TX Resident  -31.08070         Carolina wren CARW (32)
## 4        TX Migrant  -169.19579 Yellow-rumped warbler YRWA (28)
## 5        TX Migrant  -170.42079 Yellow-rumped warbler YRWA (28)
## 6        TX Migrant  -158.66925 Yellow-rumped warbler YRWA (28)
## 7        TX Migrant  -165.55278 Yellow-rumped warbler YRWA (28)
## 8        TX Migrant  -170.43374 Yellow-rumped warbler YRWA (28)
## 9        TX Migrant  -170.21801 Yellow-rumped warbler YRWA (28)
## 10       TX Migrant  -184.45871 Yellow-rumped warbler YRWA (28)


 ggplot(FeatherData, aes(x = Location, y = FeatherD)) +
   geom_boxplot(alpha = 0.7, fill='#A4A4A4') +
   scale_y_continuous() +
   scale_x_discrete(name = "Location") +
   theme_bw() +
   theme(plot.title = element_text(size = 20, family = "Times", face = 
 "bold"),
         text = element_text(size = 20, family = "Times"),
         axis.title = element_text(face="bold"),
         axis.text.x=element_text(size = 15)) +
   ylab(expression(Feather~delta^2~H["f"]~"‰")) +
   facet_grid(. ~ Status)

推荐答案

有多种方法可以执行此类任务。最灵活的方法是将绘图调用之外的统计信息作为一个单独的数据框进行计算,并将其用作自己的图层:

There's multiple ways to do this sort of task. The most flexible way is to compute your statistic outside the plotting call as a separate dataframe and use it as its own layer:

library(dplyr)
library(ggplot2)

cw_summary <- ChickWeight %>% 
  group_by(Diet) %>% 
  tally()

cw_summary




# A tibble: 4 x 2
    Diet     n
  <fctr> <int>
1      1   220
2      2   120
3      3   120
4      4   118




ggplot(ChickWeight, aes(Diet, weight)) + 
  geom_boxplot() +
  facet_grid(~Diet) +
  geom_text(data = cw_summary,
            aes(Diet, Inf, label = n), vjust = 1)

另一种方法是使用内置的摘要功能,但这很奇怪。例如:

The other method is to use the summary functions built in, but that can be fiddly. Here's an example:

ggplot(ChickWeight, aes(Diet, weight)) + 
  geom_boxplot() +
  stat_summary(fun.y = median, fun.ymax = length,
               geom = "text", aes(label = ..ymax..), vjust = -1) +
  facet_grid(~Diet)

在这里,我使用 fun.y 将汇总放置在y值的中位数,并使用 fun.ymax 来计算名为 .. ymax .. 的内部变量,该内部变量具有函数 length (仅计算观察值的数量) )。

Here I used fun.y to position the summary at the median of the y values, and used fun.ymax to compute an internal variable called ..ymax.. with the function length (which just counts the number of observations).

这篇关于将样本量添加到箱形图的面板图中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆