2013-11-22 31 views
0

我的代码中的R下面几行:Muliple图 - 如何放置段,避免右侧空间

dat <- data.frame(mse=rnorm(1000), 
        m1=c(rep("A",333),rep("B",333),rep("C",334)), 
        m2=c(rep("E10",250),rep("E20",250),rep("E30",250),rep("E40",250)), 
        m3=c(rep("F1",200),rep("F2",200),rep("F3",200),rep("F4",200),rep("F5",200))) 

par(mfrow = c(1, 3), xpd=FALSE) 
par(cex = 0.6) 
par(mar = c(0, 0, 0, 6), oma = c(6, 4, 0.5, 0.0)) 
par(tcl = -0.25) 
par(mgp = c(2, 0.6, 0)) 

boxplot(mse ~ m1, data=dat, ylim=c(-4,4), axes=F) 
axis(1, at=1:3, labels=c("A", "B", "C")) 
axis(2) 
boxplot(mse ~ m2, data=dat, ylim=c(-4,4), axes=F) 
axis(1, at=1:4, labels=c("E10", "E20", "E30", "E40")) 

par(xpd=NA) 
segments(-0.5,par("usr")[3],-0.5,par("usr")[4],lty=2) 
par(xpd=FALSE) 

boxplot(mse ~ m3, data=dat, ylim=c(-4,4), axes=F) 
axis(1, at=1:5, labels=c("F1", "F2", "F3", "F4","F5")) 
box("inner") 

par(xpd=NA) 
segments(-1,par("usr")[3],-1,par("usr")[4],lty=2) 
par(xpd=FALSE) 

这里是我的问题:

  1. 的展示位置在箱形图之间进行区分对于我来说似乎有点奇怪,它可以轻松完成吗?
  2. 我设置右边距等于6,但我不会在最后一个箱线的这个边距右边。我怎样才能避免这种情况?

我意识到,最简单的方法来得到我想要的东西,是给数据作为一个列表箱线图()调用:

dat <- data.frame(mse=rnorm(1000), 
        m1=c(rep("A",333),rep("B",333),rep("C",334)), 
        m2=c(rep("E10",250),rep("E20",250),rep("E30",250),rep("E40",250)), 
        m3=c(rep("F1",200),rep("F2",200),rep("F3",200),rep("F4",200),rep("F5",200))) 

datList <- list(A=dat[dat$m1=="A",]$mse, 
       B=dat[dat$m1=="B",]$mse, 
       C=dat[dat$m1=="C",]$mse, 
       E10=dat[dat$m2=="E10",]$mse, 
       E20=dat[dat$m2=="E20",]$mse, 
       E30=dat[dat$m2=="E30",]$mse, 
       E40=dat[dat$m2=="E40",]$mse, 
       F1=dat[dat$m3=="F1",]$mse, 
       F2=dat[dat$m3=="F2",]$mse, 
       F3=dat[dat$m3=="F3",]$mse, 
       F4=dat[dat$m3=="F4",]$mse, 
       F5=dat[dat$m3=="F5",]$mse) 



par(mfrow = c(1, 1)) 
par(cex = 0.6) 
par(mar = c(0, 3.5, 0, 0), oma = c(6, 4, 0.5, 0.5)) 
par(tcl = -0.25) 
par(mgp = c(2, 0.6, 0)) 


boxplot(datList, at = c(1:3, 5:8, 10:14), xlim = c(1, 14), axes = F, ylab="mse") 
box(); axis(2, las = 1); 
axis(1, labels = c("A", "B", "C", "E10", "E20", "E30", "E40", "F1", "F2", "F3", "F4", "F5"), at = c(1:3, 5:8, 10:14)) 

abline(v = c(4, 9), lty = 2) 

然后我得到以下结果:

boxplot

回答

0

如何:

library(ggplot2) 
library(gridExtra) 
ggp <- ggplot(dat) 
p1 <- ggp + geom_boxplot(aes(x=m1, y=mse)) 
p2 <- ggp + geom_boxplot(aes(x=m2, y=mse)) 
p3 <- ggp + geom_boxplot(aes(x=m3, y=mse)) 

grid.arrange(p1,p2,p3,nrow=1) 

enter image description here

在回应@保罗,您可以:

library(reshape2) 
xx=melt(dat, id.vars="mse", measure.vars=c("m1","m2","m3"), 
    variable.name="facet", value.name="facet.variable") 
ggplot(xx) + 
    geom_boxplot(aes(x=facet.variable,y=mse)) + 
    facet_grid(~facet,scales="free") + 
    labs(x="") 

我只是想其他的办法是简单和容易理解。请注意,实际数据此次不同,因为示例数据集是使用rnorm(...)生成的。

+0

为什么使用'grid.arrange'替代'facet_wrap'? –

相关问题