Подтвердить что ты не робот

Как нарисовать коробку со значительным уровнем?

Некоторое время назад я задал вопрос о рисовании коробочного сюжета Link1.

У меня есть данные с 3 различными группами (или ярлыками). Пожалуйста, загрузите здесь. Я могу использовать следующие коды R, чтобы получить коробку

library(reshape2)
library(ggplot2)

morphData <- read.table(".\\TestData3.csv", sep=",", header=TRUE);
morphData.reshaped <- melt(morphData, id.var = "Label")

ggplot(data = morphData.reshaped, aes(x=variable, y=value)) + 
  + geom_boxplot(aes(fill=Label))

Здесь мне просто интересно, как поставить значимый уровень над боксплотом. Чтобы прояснить ситуацию, я поставил скриншот, вырезанный из бумаги:

Boxplot

4b9b3361

Ответ 1

Я не совсем понимаю, что вы подразумеваете под ящиком со значительным уровнем, но вот предложение о том, как вы можете сгенерировать эти бары: я бы решил это построить небольшие кадры данных с координатами баров. Вот пример:

pp <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_boxplot()
df1 <- data.frame(a = c(1, 1:3,3), b = c(39, 40, 40, 40, 39))
df2 <- data.frame(a = c(1, 1,2, 2), b = c(35, 36, 36, 35))
df3 <- data.frame(a = c(2, 2, 3, 3), b = c(24, 25, 25, 24))

pp + geom_line(data = df1, aes(x = a, y = b)) + annotate("text", x = 2, y = 42, label = "*", size = 8) +
     geom_line(data = df2, aes(x = a, y = b)) + annotate("text", x = 1.5, y = 38, label = "**", size = 8) +
     geom_line(data = df3, aes(x = a, y = b)) + annotate("text", x = 2.5, y = 27, label = "n.s.", size = 8)

enter image description here

Ответ 2

Я знаю, что это старый вопрос, и ответ DatamineR уже дает одно решение проблемы. Но недавно я создал расширение ggplot, которое упростило весь процесс добавления строк значимости: ggsignif

Вместо утомительного добавления geom_line и annotate к вашему сюжету вы просто добавляете один слой geom_signif:

library(ggplot2)
library(ggsignif)

ggplot(iris, aes(x=Species, y=Sepal.Length)) + 
  geom_boxplot() +
  geom_signif(comparisons = list(c("versicolor", "virginica")), 
              map_signif_level=TRUE)

Boxplot с линией значимости

Полная документация пакета доступна по адресу CRAN.