2014-04-24 148 views
11

我在做一些挖掘後感覺這可能不起作用,我需要發現另一種方法,但是我會反正問。在同一圖表上繪製兩張圖R,ggplot2 par(mfrow())

我要,我要繪製在同一圖表上,通過利用par(mfrow=c(1,2))

我的代碼爲圖圖如下:

mTotal <- mean(data$Total) 
mTotal 

data$valence1[data$Total >= mTotal] <- "Above Mean" 
data$valence1[data$Total < mTotal] <- "Below Mean" 
data$valence2[data$Delta >= 0] <- "Positive" 
data$valence2[data$Delta < 0] <- "Negative" 

data 

par(mfrow=c(1,2)) 

ggplot(data, 
     aes(x = Index, 
      y = Total, 
      fill = valence1)) + 
    geom_bar(stat = "identity", 
      colour = "black", 
      alpha = 0.618) + 
    geom_hline(yintercept = mTotal, 
      linetype = "dashed", 
      colour = "red") + 
    annotate("text", x = 19, y = mTotal + 50, 
      label = "Problem Period") + 
    xlab("Date") + 
    ylab("Ambulance Arrivals") + 
    ggtitle("Ambulance Arrivals by Month 
      Jan 2013 - Feb 2014") 

maxDelta <- max(data$Delta) 
maxDelta 
minDelta <- min(data$Delta) 
minDelta 

ggplot(data, 
     aes(x = Index, 
      y = Delta, 
      fill = valence2)) + 
    geom_bar(stat = "identity", 
      position = "identity", 
      colour = "black", 
      alpha = 0.618) + 
    annotate("rect", xmin = 13.5, xmax = 24.5, 
      ymin = minDelta, ymax = maxDelta, 
      alpha = 0.3, fill = "blue") + 
    annotate("text", x = 19, y = maxDelta + 25, 
      label = "Problem Period") + 
    xlab("Date") + 
    ylab("Change in Arrivals") + 
    ggtitle("Change in Ambulance Arrivals Month over Month") 

如果這是不可能的,那麼一個更好的路線方向將不勝感激。

謝謝

回答

19

看那gridExtra包,然後用grid.arrange代替。與ggplot巧妙地合作。

你的第一個電話ggplot只是分配給一個變量(例如plot1)和旁邊的另一個(例如plot2),並做一些事情,如:

grid.arrange(plot1, plot2, nrow=1, ncol=2) 
+0

謝謝你,這是一個相當簡單的解決方案,做了我想要的。 –

+0

如果我想選擇'plot1'和'plot2'進行堆疊,然後說'plot3'和'plot4'堆疊在它旁邊,該怎麼辦?與'par(mfcol)'類似' – Bonono

+1

@Bonono只需將'nrow'和'ncol'設置爲合理的值,然後嘗試確定這些圖是從左到右還是從上到下「填充」佈局。 –

6

mfrow是與基地顯卡使用。對於ggplot2你需要一個不同的方法,如通過@hrbmstr提到的,或本之一:

library("ggplot2") 
library("grid") 

a <- qplot(x = rnorm(10)) 
b <- qplot(x = rnorm(10)) 

vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y) 

grid.newpage() 
pushViewport(viewport(layout = grid.layout(1, 2))) 

print(a, vp = vplayout(1,1)) 
print(b, vp = vplayout(1,2)) 
+0

感謝您向我展示hrbrmstrs'解決方案的替代方法 –

3

遲到了,但我不得不處理這個發現對於multiplots一個簡單的解決方案簡單地看在中gridExtra包(上@hrbrmstr builind):

library("ggplot2") 
library("gridExtra") 
pl <- lapply(1:4, function(.x) qplot(1:10, rnorm(10), main=paste("plot", .x))) 
marrangeGrob(pl, nrow=2, ncol=2) 

Multi-plot with ggplot and grid

只要把您繪製在lapply生成功能,你所有的設置。

+0

如果我想選擇'plot1'和'plot2'進行堆疊,然後說'plot3'和'plot4'堆疊在它旁邊,該怎麼辦?類似於'par(mfcol)' – Bonono

+1

@Bonono我認爲這就是你想要的'library(「ggplot2」) library(「gridExtra」) pl < - lapply(1:4,function(.x)qplot 1:10,rnorm(10),main = paste(「plot」,.x))) lay <-rbind(c(1,3,4), c(2,3,4)) grid。安排(grobs = pl,layout_matrix = lay)'這會給你[this](http://i.imgur.com/7izwkMz.png)。如需進一步參考,請參閱[此處](https://cran.r-project.org/web/packages/gridExtra/vignettes/arrangeGrob.html) –

+1

謝謝你勝利者!這裏更容易:http://stackoverflow.com/questions/40877386/grid-arrange-ggplot2-plots-by-columns-instead-of-by-row-using-lists/40877889?noredirect=1#comment68971679_40877889 – Bonono

相關問題