2013-09-27 30 views
9

私は自分のデータの探索的な分析をしており、ggplotを使って複数のグラフィックをプロットする必要があります。グラフィックスの量は本当に巨大です(206ステーション)、必要なページ数を超えて1ページあたり8行と1列にプロットしたいと思いました。私は、ビューポートやgrid.arrangeのような関数を認識していますが、私はそれらをこの場合に動作させるように管理していません。私はすでにlayout()やpar(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

こんにちはJose、これを再現可能な例にしてもよろしいですか?これは、一般的に、コードをつかんで実行できるように、おもちゃのデータを提供することを意味します。多くの場合、人々はこれを行うために '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

単純なプロットで正しい順序を取得すると、複雑なものに置き換えるだけなので、プロットを単純化する必要があります。 ggplot2gridパッケージに基づいているため、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 oneまたはthis oneなどの他の方法を使用するか、ネイティブplot関数を使用する必要があります。たぶん、あなたは1ページ、複数の文書にそれを置くために、その後、第2のリンク上に8つのプロットを取得するためにファセットを使用することができます

...

1

ファセットが移動するための方法かもしれません。ページあたりに必要なファセットミニプロットの数を決定し、必要な回数ループして、あなたが行ったときにpngまたはpdfを生成します。したがって、200データ項目があり、1ページあたり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

私はまだグリーンベルトですので、自分自身のような4thダンベルトの助けが必要です。また、 'apply'ファミリーの代わりに' plyr'と 'dplyr'を使うことに慣れてきました。ですから、私はここで推測していますが、これは 'tab'引数を'% '%関数を使ってggplot' p'にサブセット化した 'tab'オブジェクト(Stationでサブセット化)を渡したことを意味しますオリジナルで開催?もしそうなら、それは素晴らしいです。 – llewmills

関連する問題