2013-11-22 32 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'? –

相關問題