Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to draw the boxplot with significant level?

Some time ago I asked a question about drawing boxplot Link1.

I have got some data with 3 different groups (or labels) Please down load here. I can use the following R codes to get the boxplot

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))

Here I just wondering how to put the significant level above the boxplot. To make myself clear I put a screenshot cut from a paper here:

Boxplot

like image 785
Samo Jerom Avatar asked Mar 25 '15 17:03

Samo Jerom


People also ask

How do you show the significant difference in Boxplots?

If two boxes do not overlap with one another, say, box A is completely above or below box B, then there is a difference between the two groups. Non-overlapping boxes, groups are different. If they overlap, move on to the lines inside the boxes.

How many statistically significant number does box plot show?

Box plots show the five-number summary of a set of data: including the minimum score, first (lower) quartile, median, third (upper) quartile, and maximum score.

How do you find the p value in a box plot?

You can calculate a p-value between the two box plots by doing a t-test of all genes of one group vs other. You can combine the two normal groups into one and two tumor groups into one,and then do the t-test .


2 Answers

I know that this is an old question and the answer by DatamineR already provides one solution for the problem. But I recently created a ggplot-extension that simplifies the whole process of adding significance bars: ggsignif

Instead of tediously adding the geom_line and annotate to your plot you just add a single layer 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 with significance bar

Full documentation of the package is available at CRAN.

like image 87
const-ae Avatar answered Oct 18 '22 21:10

const-ae


I don't quite understand what you mean by boxplot with significant level but here a suggestion how you can generate those bars: I would solve this constructing small dataframes with the coordinates of the bars. Here an example:

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

like image 25
DatamineR Avatar answered Oct 18 '22 21:10

DatamineR