2015-05-29 55 views
1

我正在尝试将ggplot结果和空间栅格的plotRGB合并为一个绘图并将其写入PNG。我已经发现如何结合ggplots或做一个多时隙,但这个特定的设置,我不知道如何去工作。此代码也集成在for循环中,这意味着需要使用print语句实际绘制ggplot(在PNG或Rstudio中)。将ggplot和plotRGB合并到一个PNG图中

library(raster) 
library(ggplot2) 

plotRGB(brick(raster(matrix(rnorm(10000),ncol=100)), 
       raster(matrix(rnorm(10000),ncol=100)), 
       raster(matrix(rnorm(10000),ncol=100))),r=1,g=2,b=3,stretch="lin") 
ggdata=data.frame("x"=seq(100),"y"=rnorm(100)) 
ggplot(ggdata,aes(x=x,y=y))+ 
    geom_line() 

请问你知道如何将这两个组合成PNG任何人(在良好for循环,但没有必要显示)?

回答

4

由于plotRGB使用base图形和ggplot2使用grid图形,将它们结合起来,我们可以使用gridBase包。此代码似乎工作

require("raster") 
require("ggplot2") 
require("gridBase") 
require("grid") 
require("gridExtra") 

png("gg.png", width = 600, height = 1200) 

grid.newpage() 
pushViewport(viewport(width=1, height=0.5, y = .75)) 
par(omi=gridOMI()) 
par(mfrow=c(2, 2), mfg=c(1, 1), mar=c(3, 3, 1, 0)) 
for (i in 1:3) { 
    plotRGB(brick(raster(matrix(rnorm(10000),ncol=100)), 
       raster(matrix(rnorm(10000),ncol=100)), 
       raster(matrix(rnorm(10000),ncol=100))),r=1,g=2,b=3,stretch="lin") 
} 
upViewport() 

pushViewport(viewport(width=1, height=0.5, y = .25)) 
ggdata=data.frame("x"=seq(100),"y"=rnorm(100)) 
grid.draw(ggplotGrob(
    ggplot(ggdata,aes(x=x,y=y))+ 
    geom_line())) 
upViewport() 
dev.off() 

这会产生下列PNG: enter image description here

我劝你熟悉使用的包的文件,以便能够吸引你,你想:)的方式需要什么

+0

谢谢!我将你的代码调整到了我自己的对象,并且工作。 –