2016-12-21 27 views
0

任意のデータセットを仮定してください。状況:すべての独立変数に対してforループを実行して、従属変数との関係(散布)プロットを作成しています。そして、PDFファイルとしてプロットを保存したいのですが、すでに達成している1つの個別ページのすべてのグラフではなく、1ファイルにつき1ページまたは2ページのpdfファイルに保存します。私は、次のような場合forループから1つのpdfページに複数のグラフを保存するR

を使用しています

第一のdevのオプションを使用してみてください

library(ggplot2) 
library(gridExtra) 

pdf("one.pdf", onefile = TRUE) 
for (i in 1:length(dataset)) 
{ 
new_plot[[i]]=print(ggplot(data=dataset, aes(x=dataset[[i]], y=loss))+geom_point(size=1, alpha=0.3)+ 
     geom_smooth(method = lm)+ 
     xlab(paste0(colnames(int[i]), '\n', 'R-Squared: ',round(cor(int[[i]],int$loss, use = 'complete.obs'), 2)))+ 
     ylab("log(loss)") + theme_light()) 
plot_list = c(new_plot[[i]]) 
grid.arrange(plot_list) 
} 
dev.off() 

第二ggsave

for (i in 1:length(dataset)) 
    { 
    new_plot[[i]]=print(ggplot(data=dataset, aes(x=dataset[[i]], y=loss))+geom_point(size=1, alpha=0.3)+ 
      geom_smooth(method = lm)+ 
      xlab(paste0(colnames(int[i]), '\n', 'R-Squared: ',round(cor(int[[i]],int$loss, use = 'complete.obs'), 2)))+ 
      ylab("log(loss)") + theme_light()) 
    m=marrangeGrob(new_plot[[i]],nrow=2, ncol=2) 
    } 

    ggsave("one.pdf",m) 

私は可能な場合もエラー

Error in gList(data = list(list(x = c(2213.18, 1283.6, 3005.09, 939.85, : 
only 'grobs' allowed in "gList" 

を受信した時刻の両方を使用してみてくださいグラフをどのページに2 * 2(例)で掲載するかを共有します。私はすべての助けに感謝します。アドバンスのおかげで!

答えて

1

簡単なアプローチの1つは、データを長い形式に変換することです(からtidyrまで)。facet_wrapを使用して手配してください。また、難しいループのいくつかを保存し、あなたが必要とする可能性のある伝説を含めるのを自動化します。

再現性のあるデータを提供していないため、ここには組み込みのirisデータの例があります。

iris %>% 
    gather(Response, Value, -Sepal.Width, -Species) %>% 
    ggplot(aes(x = Value 
      , y = Sepal.Width 
      , col = Species)) + 
    geom_point() + 
    geom_smooth(method = "lm") + 
    facet_wrap(~Response 
      , scale = "free_x") 

います:

enter image description here

を何らかの理由で、あなたは本当にあなたが一緒に物事をステッチするパッケージcowplotを使用することができ、代わりにプロットをループにしたい、場合。上記のアプローチの問題の1つは、毎回プロットリストを上書きしているように見えることです。すべてのプロットを作成して処理するほうがよい場合があります。

ここでは、forの代わりにlapplyを使用しています。これははるかにスムーズに動作する傾向があるためです。私はaesにベクトルを渡すのではなく、aes_stringを使用しているので、どこで何が起きているのかがより明確になります。

myPlots <- lapply(names(iris)[c(1,3,4)], function(thisPredictor){ 
    iris %>% 
    ggplot(aes_string(x = thisPredictor 
         , y = "Sepal.Width" 
         , col = "Species")) + 
    geom_point() + 
    geom_smooth(method = "lm") 
}) 

その後、あなたはとても

plot_grid(plotlist = myPlots) 

が与えるようにそれらを一緒に入れてplot_gridを使用することができますされていない場合

enter image description here

伝説のために働くことになります。幸いなことに、これらは簡単にだけでなく

を扱うことができ
plot_grid(
    plot_grid(plotlist = lapply(myPlots, function(x){x + theme(legend.position = "none")}) 
      , nrow = 1) 
    , get_legend(myPlots[[1]] + theme(legend.direction = "horizontal")) 
    , nrow = 2 
    , rel_heights = c(9,1)) 

enter image description here

+0

を与え、それは本当に便利です、ありがとうございました。同じ解決法でaes_stringを使用しているときにy = log(y)を取る方法を教えてもらえますか? "thispredictor"がxとして渡されたため、aes_stringを使用する必要があります –

+0

同じ方法で入力するだけですちょうど引用符の中にあります。私の例では、 'y =" log(Sepal.Width) "'を使うだけです。 'paste0(" log( "、thisPredictor、") ")などの関数を追加するためにpaste(または文字ベクトルを返す他の関数)を使うこともできます。 –

関連する問題