【问题标题】:image raster R package - raster printing without background and border and legend图像光栅 R 包 - 没有背景和边框和图例的光栅打印
【发布时间】:2015-03-19 06:08:10
【问题描述】:

我正在使用如下行所示的栅格函数。我的最后一行产生了一些输出。该输出有一行写着dimensions : 240, 320, 76800 (nrow, ncol, ncell)。我想重新打印该图像,但只说前 200 行和前 300 列。我怎样才能做到这一点?下面的倒数第二行绘制了整个图像

f <- "pictures/image1-1421787394.jpeg"
f
r <- raster(f)
plot(r);
r

==============================update1

我使用png(filename = '~/x.png');par(mar=rep(0, 4), xpd = TRUE, oma=rep(0, 4),bty='n') ; plot(r,xlim=c(0,200),ylim=c(0,200),legend=FALSE,axes=FALSE); dev.off() 来保存裁剪后的图像。我能够摆脱图例和轴以及黑匣子。但问题是保存的图像包含的不仅仅是裁剪部分 - 例如图像周围的白色部分。我只想保存原件的裁剪部分(保持图像大小为 200*200 像素)。请告诉我该怎么做?

此外,如何在原始图像中添加与上述裁剪部分相对应的红色方块?我的意思是我想在原始图像的顶部获得一个红色正方形(只有边缘),然后将这个(原始图像+正方形)保存为新图像。

我该怎么做?

更新2++++++++++++++++++++++++++++++++++++++++++++++++++

添加可重复的示例以显示我所说的白色背景的意思

下面的最后一行绘制了裁剪后的图像。我希望该图像为 100*100,因为我的 xlim 和 ylim 为 100。但我看到一个白色背景,如下例所示。 (你看不到背景。但是如果你在你的机器上运行代码并打开图像,你会看到它)

library(raster)
r <- raster(nrow=240, ncol=320)
values(r) <- 1:ncell(r)
plot(r)
plot(r,xlim=c(0,100),ylim=c(0,100),legend=FALSE,axes=FALSE,frame.plot=F)

【问题讨论】:

    标签: r image r-raster


    【解决方案1】:

    你可以通过设置xlimylim来做到这一点:

    plot(r,xlim=c(0,299),ylim=c(0,199))
    

    [更新] 要摆脱白色背景,可以试试useRaster=F参数:

    plot(r,xlim=c(0,100),ylim=c(0,100),legend=FALSE,axes=FALSE,frame.plot=F,useRaster=F)
    

    【讨论】:

    • 有什么方法可以保存新图像(裁剪)?
    • 当然——做png(filename = '~/x.png'); plot(r,xlim=c(0,200),ylim=c(0,200)); dev.off()。您还可以使用其他命令,如pdf()jpeg() 来生成不同格式的图像。
    • 还有一个问题:我打算使用 getValues() 函数获取值。 getValues(r) 工作正常。但我只想获取裁剪图像的值。如何将 getValues 函数与 xlim 和 ylim 参数结合使用?
    • 我总是可以保存裁剪后的图像,然后对其应用 getValues 函数。但我觉得一定有更简单的方法
    • 有getValuesBlock。而且您不必像 getValues(crop(x, e)) 那样“保存”裁剪后的图像
    【解决方案2】:

    如果很好地理解了您的问题,您有一个 Dim(r) 为 c(240, 320, 1) 的 RasterLayer r,您希望将其裁剪为前 200 行和 300 列,然后在没有空白的情况下绘制它。

    始终提供示例数据。在这种情况下,这很容易做到。

    library(raster)
    r <- raster(nrow=240, ncol=320)
    values(r) <- 1:ncell(r)
    

    有多种按行/列裁剪的方法。例如,您可以创建一个范围对象并使用它。

    e <- extent(r, 1, 200, 1, 300)
    rc <- crop(r, e)
    

    另一种方法(对于较小尺寸的栅格)是使用索引和 drop=FALSE

    rc <- r[1:200, 1:300, drop=FALSE]
    

    要制作地图,您可以使用“绘图”或“图像”。也许图像更符合您的喜好(较少的空白,但没有图例)

    image(rc)  
    

    你可以在绘图前设置设备的大小。

    dev.new(height=nrow(r), width=ncol(r))
    plot(rc, legend=FALSE)
    

    您还可以绘制到 png 等文件以避免空白;取决于您如何设置“参数”,例如 mai

    png('test.png', width=450, height=275)
    plot(rc)
    dev.off()
    

    处理这个问题的其他方法包括使用 spplot 或 rasterVis 包中的 levelplot

    spplot(rc)
    library(rasterVis)
    levelplot(rc)
    

    获取原图上的红色矩形

    plot(r)
    plot(e, add=TRUE, col='red', lwd=2)
    

    【讨论】:

    • 当我使用 png 命令时,我应该设置哪些参数来避免任何背景?在您的示例中,裁剪后的图像将是 200*300(根据范围命令),那么在 png 命令中,为什么您的宽度 = 450,高度 = 275?
    • 当我绘制原始图像左下角为 0,0 时。但是当我绘制扩展时,为什么它会在图像顶部显示为水平条?它不应该是位于图像最左侧的垂直条吗?
    • 我不知道您所说的“避免任何背景”是什么意思。我更改宽度/高度以适应图例。我不知道你所说的水平和垂直条是什么意思(我也没有看到)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2015-03-30
    • 2020-05-07
    相关资源
    最近更新 更多