【问题标题】:Combining a ggplot and plotRGB in one PNG plot将 ggplot 和 plotRGB 组合在一个 PNG 图中
【发布时间】:2015-05-29 07:27:18
【问题描述】:

我正在尝试将 ggplot 结果和空间栅格的 plotRGB 组合到一个图中并将其写入 PNG。我已经找到了如何组合 ggplots 或做一个 multiplot 但这个特定的设置我不知道如何开始工作。此代码还集成在 for 循环中,这意味着需要使用 print 语句来实际绘制 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()

你们有谁知道如何将这两个组合成一个 PNG(最好在 for 循环中显示,但不是必需的)?

【问题讨论】:

    标签: r plot ggplot2 raster


    【解决方案1】:

    由于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:

    我建议你熟悉使用过的包的文档,以便能够以你想要的方式绘制你需要的东西:)

    【讨论】:

    • 谢谢!我将您的代码改编为我自己的对象并且它有效。
    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2021-12-09
    • 2018-01-31
    • 2012-09-17
    相关资源
    最近更新 更多