如何绘制具有显着水平的箱线图?
How to draw the boxplot with significant level?
前段时间问了一个画箱线图的问题Link1。
我得到了一些包含 3 个不同组(或标签)的数据 Please down load here。我可以使用以下 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))
这里我只是想知道如何将显着性水平置于箱线图之上。为了清楚起见,我在这里放了一张从论文中截取的屏幕截图:
我不太明白你所说的具有显着水平的箱线图是什么意思,但这里有一个如何生成这些条形图的建议:我会用坐标来解决这个构建小数据框的问题的酒吧。举个例子:
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)
我知道这是一个老问题,DatamineR 的回答已经为该问题提供了一种解决方案。但我最近创建了一个 ggplot-extension,它简化了添加显着性条的整个过程: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)
包的完整文档可在 CRAN.
获得
前段时间问了一个画箱线图的问题Link1。
我得到了一些包含 3 个不同组(或标签)的数据 Please down load here。我可以使用以下 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))
这里我只是想知道如何将显着性水平置于箱线图之上。为了清楚起见,我在这里放了一张从论文中截取的屏幕截图:
我不太明白你所说的具有显着水平的箱线图是什么意思,但这里有一个如何生成这些条形图的建议:我会用坐标来解决这个构建小数据框的问题的酒吧。举个例子:
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)
我知道这是一个老问题,DatamineR 的回答已经为该问题提供了一种解决方案。但我最近创建了一个 ggplot-extension,它简化了添加显着性条的整个过程: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)
包的完整文档可在 CRAN.
获得