2017-04-23 17 views
0

Rでdplyrパッケージを使用してプロットを作成し、プロットをpdf形式で保存するのが困難です。dplyrパッケージを使用してプロットファイルを生成できません

私はいくつかのデータグループを持つデータフレームを持っており、各データグループをプロットしてpdfにプロットを保存します。 dplyrパッケージでdoとgroup_byを使用しようとしましたが、pdfファイルは生成されませんでした。エラーメッセージはありませんでした。

rm(list = ls()) 

library(dplyr) 

df=data.frame(x = c(rep('a',10),rep('b',10)),y = c(1:20)) 

plt = function(df) 
{ 
    pdf('plt1.pdf') 

    plot(df$x,df$y) 

    dev.off() 

    return(data.frame()) 
} 

plt(df) 

df %>% group_by(x) %>% do(data.frame(plot(.$y))) 

私もlapply/sapplyを試してみましたが、同様のコードはうまくいきませんでした。

これを手伝ってもらえますか?

答えて

2

plt関数をdoの中に呼び出す必要があります。データグループごとに個別のpdfファイルを生成する場合は、データグループに基づいてファイル名を変更する必要があります。それ以外の場合は、最後のデータグループのプロットによってファイルが上書きされます。

ほかに
plt = function(df) { 
    pdf(sprintf('plt_%s.pdf', df$x[1])) 
    plot(df$x,df$y) 
    dev.off() 
    return(data.frame()) 
} 

df %>% group_by(x) %>% do(plt(.)) 

あなたは、単にxでグループ化されたYの単一のボックスプロットを持つようにしたい場合、あなたは1 boxplot使用することができます:ここで

boxplot(y ~ x, data = df) 
+1

感謝を! – Jason

2

をあなたの問題の解決策です:

あなたは、単一のPDFにプロットのすべてを入れたいと ggplotを使用して気にしない場合は
rm(list = ls()) 
library(dplyr) 
df=data.frame(x = c(rep('a',10),rep('b',10)),y = c(1:20)) 

plt = function(k, dtset) { 
pdf(paste('plt',k,'.pdf',sep="")) 
plot(dtset$y) 
dev.off() 
} 
plt(1, df) 

grps <- unique(df$x) 
for (k in seq_along(grps)) { 
plt(k, subset(df, df$x==grps[k])) 
} 
+0

ご協力ありがとうございます! – Jason

2

は、あなたがこのような何かを行うことができます。あなたの助けを

library(dplyr) 
library(ggplot2) 
library(gridExtra) 

# i'm using a different test data set to make scatter plots 
set.seed(1) 
df <- data.frame(id = rep(c("a", "b"), each = 10), 
       var1 = rnorm(20), 
       var2 = rnorm(20), 
       stringsAsFactors = FALSE) 

# make a list of plots, one for each group (id) 
plotlist <- lapply(unique(df$id), function(x) 

    df %>% 
    filter(id == x) %>% 
    qplot(x = var1, y = var2, data = ., main = x) 

) 

# use marrangeGrob from gridExtra to get an arranged version of that list 
mg = marrangeGrob(plotlist, nrow = 2, ncol = 1) 

# now use ggsave to write a pdf with the plots arranged as specified in the 
# previous step to the working directory; see documentation for ways to tinker 
# with layout, file type, etc. 
ggsave("myplots.pdf", mg) 
+0

助けてくれてありがとう!それは非常に啓発です! – Jason

関連する問題