在R语言中,使用rasterImage()函数创建的图像会有白色边框。

4

这个功能正常工作,可以创建一个填充整个窗口的图片:

z <- matrix(runif(500*500), ncol=500)
par(mar=c(0,0,0,0))
image(z, col=grey(0:255/255),zlim=c(0,1))

但是,即使我将边距设置为零,rasterImage()仍然会在图像周围放置边框:
z <- matrix(runif(500*500), ncol=500)
par(mar=c(0,0,0,0))
plot.new()
rasterImage(z,0,0,1,1,interpolate=FALSE)

我尝试使用plot()和mar()参数来解决问题,但都无果。请告诉我如何在使用rasterImage()时去掉边框。
我使用的是Windows 7操作系统,如果有影响请告知。非常感谢您的帮助。

这不是针对上述问题的解决方案,而是一个权宜之计。最近,image() 函数新增了一个参数 useRaster,其作用与 rasterImage 相同,即使用位图而非多边形创建图像:image(z,col=grey(0:255/255),zlim=c(0,1),useRaster=TRUE)。 - Bill Simpson
+1 为一个好的、可重现的例子。 - Simon O'Hanlon
1个回答

4

看起来您需要稍微超出绘图区域。感觉有点像一种hack方法,但它确实有效。我不确定为什么会发生这种情况,但请注意以下内容的区别...

par(mar=c(0,0,0,0))
plot.new()
rasterImage(z,-0.03,-0.03,1.03,1.03,interpolate=FALSE)

...给出了一个非常狭窄的白色边框。而...

par(mar=c(0,0,0,0))
plot.new()
rasterImage(z,-0.04,-0.04,1.04,1.04,interpolate=FALSE)

...图案超过边缘右侧的边框。某种扩展因素在某处被引入,但是这个图案超出了它。仔细观察图片上的边框。 rasters


2
谢谢Simon!你的回答指引了我正确的方向。解决方案是这样做:par(mar=c(0,0,0,0),xaxs = 'i',yaxs='i')。xaxs和yaxs参数强制R使用我想要的实际限制(即0,1),而不会稍微填充它们。 - Bill Simpson
@BillSimpson 很好。我会收藏这个问题,因为我将来肯定会发现它非常有用!干杯,比尔。 - Simon O'Hanlon
你们的回答真是太棒了,非常有用。 - Eugene Brown
@SimonO'Hanlon 非常好的想法。考虑到这已经是两年前的内容了,是否有更好的方法?如果有,请更新您的答案或撰写全新的答案。 - Bhargav Rao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接