2012-09-15 54 views
6

我有一系列ggplot s,我想按照下图所示进行排列,并插入到通过knitr解析的文档中。我不希望有一个非常小的肖像人物,而是希望将它旋转为横向,以便尽可能地填充页面。有任何想法吗?如何将ggplot旋转到横向?

library(ggplot2) 
library(grid) 
df <- data.frame(x = 1:100, y =rnorm(100)) 
plota <- ggplot(df, aes(x, y)) + geom_point(size = 4) 


pushViewport(viewport(layout = grid.layout(3, 5))) 
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y) 
     print(plota, vp = vplayout(1:2, 1:2)) 
     print(plota, vp = vplayout(1, 3)) 
     print(plota, vp = vplayout(1, 4)) 
     print(plota, vp = vplayout(1, 5)) 
     print(plota, vp = vplayout(2, 3)) 
     print(plota, vp = vplayout(2, 4)) 
     print(plota, vp = vplayout(2, 5)) 
     print(plota, vp = vplayout(3, 1)) 
     print(plota, vp = vplayout(3, 2)) 
     print(plota, vp = vplayout(3, 3)) 
     print(plota, vp = vplayout(3, 4)) 
     print(plota, vp = vplayout(3, 5)) 

回答

6

在LaTeX中很容易旋转图形;您可以使用选项angle=90,如http://yihui.name/knitr/options中所述;看到一个完整的例子如下:

\documentclass{article} 
\begin{document} 

<<out.extra='angle=90'>>= 
library(ggplot2) 
library(grid) 
df <- data.frame(x = 1:100, y =rnorm(100)) 
plota <- ggplot(df, aes(x, y)) + geom_point(size = 4) 

pushViewport(viewport(layout = grid.layout(3, 5))) 
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y) 
     print(plota, vp = vplayout(1:2, 1:2)) 
     print(plota, vp = vplayout(1, 3)) 
     print(plota, vp = vplayout(1, 4)) 
     print(plota, vp = vplayout(1, 5)) 
     print(plota, vp = vplayout(2, 3)) 
     print(plota, vp = vplayout(2, 4)) 
     print(plota, vp = vplayout(2, 5)) 
     print(plota, vp = vplayout(3, 1)) 
     print(plota, vp = vplayout(3, 2)) 
     print(plota, vp = vplayout(3, 3)) 
     print(plota, vp = vplayout(3, 4)) 
     print(plota, vp = vplayout(3, 5)) 
@ 

\end{document} 
+1

谢谢仪辉,很多apprecciated。 – Maiasaura

相关问题