簡體   English   中英

使用ggplot在多個頁面上的多個圖形

[英]Multiple graphs over multiple pages using ggplot

我正在對我的數據進行探索性分析,需要使用ggplot繪制多個圖形。 圖形數量非常龐大(206個工作站),我想在所需的許多頁面上將它們繪制成1列而不是每頁8行。 我知道像viewport或grid.arrange這樣的函數,但我不能讓它們在這種情況下工作。 我已經注意到layout()和par(mfrow = c(8,1))不能與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()
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)

未經測試。

您應該簡化您的情節,因為一旦您通過簡單的情節獲得正確的順序,您只需將其替換為復雜的情節。 ggplot2基於grid包,因此您需要使用gridExtra來排列圖。 然后你循環,對於每8個圖,你將它們存儲在一個列表中, grid.arrange在它上面調用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()

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

面

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)

不幸的是, mfrow不適用於ggplot2 您必須使用此類此類的其他方法或使用本機plot功能。

也許你可以使用faceting將8個圖表放到一個頁面上,然后將第二個鏈接放到多個文檔中......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM