Подтвердить что ты не робот

Сегмент facet_wrap в многостраничный PDF файл

Я искал решение для этого, но похоже, что большинство из них обрабатывают индивидуально созданные графики, объединенные в формате PDF, вместо того, чтобы отделять графики, созданные с использованием огранки, на отдельные страницы PDF.

Примеры данных

В приведенных выше данных, используя следующий код, выбирая все элементы в сгенерированном списке:

Ex<-read.csv("StackOverflowEx (3).csv")
library(ggplot2)
library(reshape2)
vars <- select.list(names(Ex),multiple=TRUE,graphics=TRUE)
Cases<-subset(Ex,select=vars)

gg<-melt(Cases,id=c("Item","Total","Admin"))
print(ggplot(gg, aes(x=Total,y=Admin))+
  geom_point(colour="dark green",size=1.5)+
  geom_point(aes(y=value,color=variable))+
  geom_smooth(aes(y=value,fill=variable),
              method=loess,size=1,linetype=1,se=T)+
  facet_wrap(~variable,ncol=2,nrow=1000)+
  ylim(0,1)+
  labs(x="Expected",y="Admin",title=vars))

... должен генерировать фасетную обертку всех 8 (A-H) корпусов. Однако генерация этого имеет тенденцию к сжатию графиков и делает их менее читаемыми, и на практике я намереваюсь использовать это в более 500 случаях (который просто возвращает бары с меткой с именем столбца без читаемых диаграмм).

Можно ли указать количество графиков в фасете, чтобы они отображались на отдельной странице при преобразовании в PDF, вместо того, чтобы все графики сжимались на одну страницу? Например, используя приведенные выше данные, генерируя два графика 2x2 на отдельных страницах, которые содержат все 8 случаев индивидуально (например, случаи A-D на pg 1, случаи E-H на pg 2).

Я мог бы сделать это, выделив 4 случая + "Item", "Total" и "Admin" и повторив для следующих 4 случаев и объединив полученные PDF файлы. Однако с более чем 500 случаями на практике это означало бы более 100 итераций с большим потенциалом для человеческой ошибки. Некоторая помощь в автоматизации процесса будет отличной.

4b9b3361

Ответ 1

Поскольку ответа пока нет. Вот один из них:

library(ggplot2)
library(reshape2)

Ex <- read.csv("C:/Users/Thomas/Desktop/StackOverflowEx (3).csv")
gg <- melt(Ex,  id = c("Item", "Total", "Admin"))

# put in number of plots here
noPlots <- 4
# save all variables in a seperate vector to select in for-loop
allVars <- unique(gg$variable)
noVars <- length(allVars)

# indices for plotting variables
plotSequence <- c(seq(0, noVars-1, by = noPlots), noVars)

# pdf("plotpath.pdf") # uncomment to save the resulting plots in a pdf file
# loop over the variables to plot
for(ii in 2:length(plotSequence)){
  # select start and end of variables to plot
  start <- plotSequence[ii-1] + 1
  end <- plotSequence[ii]

  # subset the variables and save new temporary data.frame
  tmp <- subset(gg, variable %in% allVars[start:end])
  cat(unique(tmp$variable), "\n")

  # generate plot
  p <- ggplot(tmp,  aes(x = Total, y = Admin))+
    geom_point(colour = "dark green", size = 1.5)+
    geom_point(aes(y = value, color = variable))+
    geom_smooth(aes(y = value, fill = variable), 
                method = loess, size = 1, linetype = 1, se = T)+
    facet_wrap(~variable, ncol = 2, nrow = 1000)+
    ylim(0, 1)+
    labs(x = "Expected",  y = "Admin")
  print(p)
}
# dev.off()