ggplot2箱线图中的标签框

Rac*_*hel 5 r ggplot2 boxplot

我希望在由 生成的箱线图中每个框上方显示一个标签ggplot2

例如:

#Example data
test = c("A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B")
patient = c(1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3)
result =  c(5, 7, 2 ,4, 6, 7, 3, 5, 5, 6, 2 ,3)
data <- tibble(test, patient, result)

#Labels I want to include
Alabs = c(1, 3, 500)
Blabs = c(8, 16, -32)

#Plot data
ggplot(data, aes(x = factor(patient), y = result, color = factor(test))) + 
  geom_boxplot(outlier.shape = 1)
Run Code Online (Sandbox Code Playgroud)

给出情节:

在此输入图像描述

我想为Alabs第一个患者打印红色框上方的第一个元素,Alabs为第二个患者打印红色框上方的第二个元素,Blabs为第一个患者打印蓝色框上方的第一个元素,等等。

我该怎么做呢?

aos*_*ith 4

我会制作一个单独的标签数据集来添加标签。

labs = tibble(test = rep(LETTERS[1:2], each = 3),
                  patient = c(1, 2, 3, 1, 2, 3),
                  labels = c(1, 3, 500, 8, 16, -32) )

   test patient labels
  <chr>   <dbl>  <dbl>
1     A       1      1
2     A       2      3
3     A       3    500
4     B       1      8
5     B       2     16
6     B       3    -32
Run Code Online (Sandbox Code Playgroud)

上面包含了关于x轴和faceting变量的所有信息。它缺少的是有关 y 轴上文本位置的信息。为了将它们放在框上方,我们可以计算每个因子组合的最大值加上 y 位置的小值(虽然geom_text有一个有用的nudge_y参数,但它在躲避时不起作用)。

我通过dplyr对每组进行摘要,然后将 y 位置值加入到标签数据集。

library(dplyr)

labeldat = data %>%
     group_by(test, patient) %>%
     summarize(ypos = max(result) + .25 ) %>%
     inner_join(., labs)
Run Code Online (Sandbox Code Playgroud)

现在您可以geom_text使用标签数据集添加图层。要以与箱线图相同的方式避免这些,请使用position_dodge. 为了防止字母出现在我使用的图例中show.legend = FALSE

ggplot(data, aes(x = factor(patient), y = result, color = test)) + 
     geom_boxplot(outlier.shape = 1) +
     geom_text(data = labeldat, aes(label = labels, y = ypos), 
               position = position_dodge(width = .75), 
               show.legend = FALSE )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述