2013-09-27 36 views
9

我做我的數據的探索性分析和多頁的多個圖形需要繪製使用ggplot多個圖形。圖形的數量真的很大(206站),並且我想要在他們需要的很多頁面上將它們繪製成1列而每頁8行。我知道像viewport或grid.arrange這樣的函數,但我並沒有設法使它們在這種情況下工作。我已經注意到,佈局(),也不面值(mfrow = C(8,1))不ggplot工作,但我派我在哪裏卡住波紋管代碼的一部分。任何幫助將非常感激!在使用ggplot

pdf('test.pdf', width=21, height=27) 
par(mfrow=c(8,1)) 
for(i in levels(tab$Station)) 
{ 

print(ggplot(tab[tab$Station==i], aes(x=Date)) + 
    geom_line(aes(y=Tmin), col="blue", size=0.1) + 
    geom_line(aes(y=Tmax), col="red", size=0.1) + 
    geom_text(aes(x=as.Date('2010-01-01'), y=45), label=i) + 
    ylim(0, 45) + 
    scale_x_date(labels = date_format("%Y")) + 
    theme_bw() + 
    theme(
    plot.background = element_blank() 
    ,panel.grid.major = element_blank() 
    ,panel.grid.minor = element_blank() 
    ,panel.border = element_rect(color = 'black') 
    ,panel.background = element_blank() 

) 
) 

} 

dev.off() 
+3

何塞嗨,你能不能使之成爲一個可重複的例子嗎?這通常意味着提供玩具數據,以便我們可以抓住代碼並運行它。大多數情況下,人們使用'data()'函數來執行此操作。例如'data(mtcars)'將'mtcars' data.frame加載到內存中。 – Statwonk

+1

@baptiste的答案是否奏效? –

+2

我知道這是一個老問題 - 但嘗試使用ggforce包中的facet_wrap_paginate函數。看到這裏的幫助https://cran.r-project.org/web/packages/ggforce/ggforce.pdf這就是我解決我的類似問題。 –

回答

1

你應該簡化你的情節,因爲一旦你得到了一個簡單的情節正確的順序,你只需將其替換爲複雜的情節。 ggplot2基於grid包,所以你需要使用gridExtra來安排你的地塊。然後,你遍歷,對每個地塊8,您將它們保存在列表中,你叫grid.arrange過它,並且重複此,直到你的情節結束...

library(gridExtra) 
library(ggplot2) 
pdf('test.pdf', width=21, height=27) 
i = 1 
plot = list() 
for (n in unique(tab$Station)){ 
    ### process data for plotting here #### 
    plot[[i]] = ggplot(tab[tab$Station==n], aes(x=Date)) +... 
    if (i %% 8 == 0) { ## print 8 plots on a page 
    print (do.call(grid.arrange, plot)) 
    plot = list() # reset plot 
    i = 0 # reset index 
    } 
    i = i + 1 
} 
if (length(plot) != 0) { 
    print (do.call(grid.arrange, plot)) 
} 
dev.off() 
0

不幸的是,mfrow不起作用與ggplot2。你必須使用其他方法,如this onethis one或使用本地plot功能。

也許你可以使用刻面得到8個地塊到一個頁面上,那麼第二個鏈接,把它分成多個文件...

1

刻面可能是要走的路。決定每頁需要多少分面小圖,然後循環所需的次數,隨時生成png或pdf。因此,如果您有200個數據項,並且您希望每頁有50個,橫跨5個橫向和下降10個,則循環200/50 = 4次迭代。原油,但應該工作。

facets

library(ggplot2) 

ii <- 7 
nn <- 49 

mydf <- data.frame(date = rep(seq(as.Date('2013-03-01'), 
         by = 'day', length.out = ii), nn), 
        value = rep(runif(nn, 100, 200))) 

mydf$facet.variable <- rep(1:nn, each = ii) 

p <- ggplot(mydf, aes(x = date, y = value)) + 
    geom_line() + 
    facet_wrap(~ facet.variable, ncol = ii) 

print(p) 
8
library(plyr) 
library(gridExtra) 

p = ggplot(tab, aes(x=Date)) + 
     geom_line(aes(y=Tmin), col="blue", size=0.1) 

plots = dlply(tab , "Station", `%+%`, e1 = p) 
ml = do.call(marrangeGrob, c(plots, list(nrow=8, ncol=1))) 
ggsave("multipage.pdf", ml) 

未經測試。

+0

你能解釋一下你在上面創建'plots'對象嗎? ''%+%''做什麼? – llewmills

+1

'%+%'覆蓋數據在ggplot – baptiste

+0

我還是一個r綠色帶那麼從第4丹黑腰帶需要幫助,如你自己。此外,我只是現在才熟悉使用'plyr'和'dplyr'而不是'apply'系列。所以我在這裏猜測,但這是否意味着你已經通過使用'%+%'函數覆蓋'tab'參數的位置,將子集化的'tab'對象(由Station子集)傳遞到ggplot'p'在原來舉行?如果這樣太棒了。 – llewmills