一个图中多个标签的多个箱图

时间:2014-09-16 08:33:46

标签: r plot boxplot

我有以下内容:

x <- 1:5
y <- 2:6

A <- matrix(NA,nrow=100,ncol=5)
for(i in 1:5){A[,i] <- rnorm(100,x[i],y[i])}

B <- matrix(NA,nrow=100,ncol=5)
for(i in 1:5){B[,i] <- runif(100,min=x[i],max=y[i])}

以下命令为矩阵A的5列创建一个箱线图:

boxplot(A[,1:5])

我现在要做的是制作一个像这样的箱线图,其中A列的每个箱形图都绘制在B的相应列的箱线图旁边。箱形图应该直接相邻,并且在第1列到第5列的箱图对之间应该有一小段距离。

提前致谢!

2 个答案:

答案 0 :(得分:3)

将您的矩阵按列方式绑定在一起,插入NA列:

C <- cbind(A[,1],B[,1])
for ( ii in 2:5 ) C <- cbind(C,NA,A[,ii],B[,ii])

(是的,这当然不是最优雅的方式 - 但可能是最简单易懂的。)

然后选择boxplot并添加轴标签:

boxplot(C,xaxt="n")
axis(1,at=1+3*(0:4),labels=rep("A",5),tick=FALSE)
axis(1,at=2+3*(0:4),labels=rep("B",5),tick=FALSE)
axis(1,at=1.5+3*(0:4),labels=1:5,line=2,tick=FALSE)

boxplot

答案 1 :(得分:3)

dplyrtidyr的实施:

# needed libraries
library(dplyr)
library(tidyr)
library(ggplot2)

# converting to dataframes
Aa <- as.data.frame(A)
Bb <- as.data.frame(B)

# melting the dataframes & creating a 'set' variable
mA <- Aa %>% gather(var,value) %>% mutate(set="A")
mB <- Bb %>% gather(var,value) %>% mutate(set="B")

# combining them into one dataframe
AB <- rbind(mA,mB)

# creating the plot
ggplot(AB, aes(x=var, y=value, fill=set)) +
  geom_boxplot() +
  theme_bw()

给出: enter image description here


编辑:要更改框的顺序,您可以使用:

ggplot(AB, aes(x=var, y=value, fill=factor(set, levels=c("B","A")))) +
  geom_boxplot() +
  theme_bw()

给出: enter image description here