2013-05-29 4 views
1

У меня есть большой фрейм данных, и я использую ggplot.обрабатывать несколько участков с ggplot R

ggplot()+ 
    geom_line(data=DATA,aes(logl,PercPos,group=name),col="blue")+ 
    geom_line(data=DATA,aes(logl,PercNeg,group=name),col="green")+ 
    geom_histogram(data=DATA, aes(x=logl,alpha=.5,group=name),bindwidth=0.1,density=T)+ 
    facet_wrap(~ name,as.table=T)+ 
    theme_bw()+ 
    xlim(min(DATA$logl),max(DATA$logl)) 

Он генерирует 180 разных участков. Я хотел бы, чтобы результаты были построены в другом файле, , например, не более 30 сюжетов в каждом файле.

Есть ли простой автоматический способ сделать это?

Спасибо за помощь.

+0

Смотри, например, http://stackoverflow.com/questions/3398568/r-ggplot-plotting-over-multiple-pages –

+0

спасибо, что это тихий старый пост. Может быть, функция была введена в более новой версии ggplot? – Donbeo

ответ

2

Вот один подход:

library(ggplot2) 
library(plyr) 

# dummy data with 181 different levels 
N <- 181 
d <- data.frame(x=rnorm(10*N), y=rnorm(10*N), f=gl(N, 10)) 

# group levels to fit ppp plots per page 
split_df_ppp <- function(d, f, id.var = ".page_split", ppp=30){ 

    stopifnot(is.factor(f)) 
    n <- length(levels(f)) 
    pages <- n%/%ppp + as.logical(n%%ppp) 
    groups <- split(levels(f), gl(pages, ppp, n)) 

    d[[id.var]] <- f 
    levels(d[[id.var]]) <- groups 

    invisible(d) 

} 

d2 <- split_df_ppp(d, d$f) 
str(d2) 

# ggsave() could go in this function, if multiple files are preferred 
plot_one_page <- function(.d){ 
    qplot(x, y, data=.d) +facet_wrap(~f) 
} 

# here saving all plots as separate pages in one file 
pdf("multipage.pdf") 
# loop through pages 
d_ply(d2, ".page_split", plot_one_page, .print=TRUE) 
dev.off() 

Вы также можете использовать marrangeGrob из gridExtra, в этом случае не требуется facetting:

lp = dlply(d, "f", function(d) qplot(x, y, data=d)) 
g = do.call(gridExtra::marrangeGrob, c(lp, ncol=5, nrow=6)) 

ggsave("multipage.pdf", g) 
Смежные вопросы