2015-01-25 1 views
0

У меня есть функция для создания множителя (график со множеством подзаголовков) и записать его в файл.R многострочный график записи в файл сетки пакет

multiplot <- function(plotlist=NULL, cols) { 
    require(grid) 

    # Make a list from the ... arguments and plotlist 
    plots <- c(plotlist) 

    numPlots = length(plots) 

    # Make the panel 
    plotCols = cols      # Number of columns of plots 
    plotRows = ceiling(numPlots/plotCols) # Number of rows needed, calculated from # of cols 

    # Set up the page 
    grid.newpage() 
    pushViewport(viewport(layout = grid.layout(plotRows, plotCols))) 
    vplayout <- function(x, y) 
    viewport(layout.pos.row = x, layout.pos.col = y) 

    # Make each plot, in the correct location 
    for (i in 1:numPlots) { 
    curRow = ceiling(i/plotCols) 
    curCol = (i-1) %% plotCols + 1 
    print(plots[[i]], vp = vplayout(curRow, curCol)) 
    #title(paste(product_name,'_ROC___AUC = ', mroc$auc)) 
    } 

} 

и вызов функции создать следующий сюжет:

filepath <- paste(filepath,'/','Norm_Method_',norm_method,'.jpg',sep="") 
jpeg(filepath) 
#multiplot(list(ggplot1,ggplot2,ggplot3,ggplot4,ggplot5,ggplot6,ggplot7,ggplot8,linear_pred,roc.plot), cols=4) 
multiplot(list(ggplot1,ggplot2,ggplot3,ggplot4,ggplot5,ggplot6,ggplot7,ggplot8,linear_pred), cols=3) 
dev.off() 

здесь дефектный участок вид: enter image description here

очевидно картина нуждается в почесывания, так что я максимизируется его в RStudio и сохраненные вручную, результаты выглядят намного лучше: enter image description here любая идея, как написать это автоматически, чтобы файл в «максимизированном окне» улучшил версию сюжета?

ответ

0

Поэтому я бы рекомендовал использовать функцию arrangeGrob из пакета gridExtra.

Некоторые примеры кода ниже:

require(ggplot2) 

require(gridExtra) 

data(iris) 

p<-ggplot(iris) 

a<-p+geom_histogram(aes(x=Sepal.Length))+ ggtitle("A plot") 
b<-p+geom_histogram(aes(x=Sepal.Width))+ ggtitle("another PLOT") 
c<-p+geom_point(aes(x=Sepal.Width, y=Sepal.Length))+ggtitle("PLOT CITY") 
a2<-p+geom_histogram(aes(x=Sepal.Length))+ ggtitle("A plot") 
b2<-p+geom_histogram(aes(x=Sepal.Width))+ ggtitle("another PLOT") 
c2<-p+geom_point(aes(x=Sepal.Width, y=Sepal.Length))+ggtitle("PLOT CITY") 

grobula <- arrangeGrob(a,b,c,a2,b2,c2 ,ncol=3, nrow=2, 
          main = textGrob("some plots", gp = gpar(fontsize=18, fontface="bold.italic", fontsize=18)), 
          sub = textGrob("some subtitle", x=0, hjust=-0.5, vjust=0.1, gp = gpar(fontface = "italic", fontsize = 15))) 

Это выводит объект, который я назвал grobula. Вы можете распечатать или сохранить объект, как если бы объект нормальный ggplot (например, print(grobula) или ggsave(grobula,file=x.pdf)

Это делает вашу функцию немного излишним,. Вы можете просто подключить соответствующие значения в ncol и nrow в arrangeGrob

.

Наконец, чтобы указать размер участка в ggsave, вы можете изменить параметры и height. Вам также может потребоваться настроить различные размеры текста заголовков и вещей, чтобы все было в вашем конечном комбинированном сюжете. Вы можете изменить размер текста в заголовках ggplot изменяя параметры element.text. Здесь вы можете найти соответствующую документацию.

http://docs.ggplot2.org/0.9.2.1/theme.html

enter image description here

+0

Та же проблема возникает, когда я пытаюсь сохранить, сюжет оказывается выглядеть сжато. Опять же, если перед сохранением, я максимизирую окна сюжета в RStudio, а затем сохраню сюжет. Есть ли способ сказать R максимизировать окно графика перед сохранением? – user3628777