绘制R中的图像时输出尺寸错误

时间:2015-03-03 10:35:08

标签: r image plot png jpeg

我的目标是以PNG或JPEG格式读取图像文件,并在所述图像上绘制各种数据并将其保存到磁盘。

我还希望图像占据生成的图中的所有可用空间,没有轴或标签或任何东西。我有点担心这可能与我的问题有关。

代码示例

下面是我当前只尝试输出相同图像的当前代码。稍后我计划绘制与图像上坐标对应的数据点。我已经使用了一些示例代码来移除轴并能够将图像放在图的背景中。

library(jpeg)
library(grid)

img <- readJPEG(system.file("img", "Rlogo.jpg", package="jpeg"),native=TRUE)
jpeg(filename = "Rlogo-2.jpg", width=100,height=76, quality = 100,res=299)

op<-par(mar=rep(0,4))
plot(0:100,type="n", axes="FALSE",ann="FALSE")
lim <- par()
rasterImage(img, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])

dev.off()

示例输出

这是上面代码与原始图像比较的示例输出:

左边的图像是原始图像,右边的图像是修改过的图像。正如您所看到的那样,我所看到的图像和某种方式的图像似乎比原始图像小,当保存到原始尺寸时,它看起来很模糊。

我已经把头发拉过这个头几个小时,我似乎无处可去。这是我第一次尝试在图像上绘制数据,并且我意识到我对R代表图像的方式缺乏了解,而且我以前大部分时间都在使用基本图形做相对简单的图。

我目前正在考虑用Python做这件事,但我担心在实际绘制数据时我会回来咬我。

我在运行Windows 7的x86_64上运行R 3.1.0版。

1 个答案:

答案 0 :(得分:0)

总结一下,既然你已经找到了罪魁祸首,这里有两个问题:

首先,模糊似乎是由Windows上的jpeg设备引起的。在Ubuntu Linux上没有这样的问题,如果你使用开罗设备,它就会消失,正如你已经发现的那样。开罗设备非常适合pdf:s,因为它们嵌入了所有字体等,使得数字在平台上看起来相同。

其次,R默认为x和y轴增加4%的额外余量,以防止图形在绘图区域边缘附近被切断。可以通过设置xaxs="i"yaxs="i"来解决此问题。

par(mfrow=1:2)
plot(1:5, 1:5) # Left
plot(1:5, 1:5, xaxs="i", yaxs="i") # Right

enter image description here

在你的情况下,差异是微妙的,但仍然会导致一切都略微错位。

enter image description here