在一个PNG图中组合ggplot和plotRGB

jon*_*ode 1 plot r raster ggplot2

我正在尝试将ggplot结果和空间栅格的plotRGB合并到一个绘图中,并将其写入PNG。我已经找到了如何组合ggplots或做多图的方法,但是这种特定的设置我不知道如何开始工作。此代码也集成在for循环中,这意味着需要使用打印语句来实际绘制ggplot(在PNG或Rstudio中)。

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()
Run Code Online (Sandbox Code Playgroud)

你们中谁知道如何将这两者合并为PNG(最好在for循环中显示,但不是必需的)吗?

ins*_*ven 5

正如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()
Run Code Online (Sandbox Code Playgroud)

这将产生以下png: 在此处输入图片说明

我建议您熟悉二手软件包的文档,以便能够以所需的方式绘制所需的内容:)