【问题标题】:Wrong output size when plotting over an image in R在 R 中绘制图像时输出大小错误
【发布时间】:2015-05-03 23:20:25
【问题描述】:

我的目标是读取 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。

【问题讨论】:

    标签: r image plot png jpeg


    【解决方案1】:

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

    首先,模糊似乎是由 Windows 上的 jpeg 设备引起的。在 Ubuntu Linux 上没有这样的问题,如果您使用 Cairo 设备,它就会消失,正如您已经发现的那样。 Cairo 设备也非常适合 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
    

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

    【讨论】:

    • 这很有帮助@Backlin,我不知道这个绘图机制。但是我似乎无法重现您的结果。我可以在您的示例中重现这两个图,说明“r”和“i”之间的区别很好,但是当我运行我的代码示例并在 plot() 中添加建议时,我仍然会得到稍微模糊和未对齐的 R 徽标。开始怀疑电脑被诅咒了。将在另一台机器上尝试,看看我是否得到相同的结果,或者另一台计算机架构。
    • 您是否在 Windows 上运行 R?我在工作时在我的 linux 计算机上测试后发布了答案,但现在注意到它在我的 Windows 家用计算机上不起作用。然而,有一种方法可以绕过它,首先将前景图写入文件,然后手动将其与背景图片组合(参见维基百科上的alpha compositing),但我得到了工作中的代码,明天可以更新。跨度>
    • 正如我所怀疑的:黑魔法。我确实在 Windows 上运行 R,我将使用操作系统详细信息和 R 版本信息更新我的问题。不过这很棒,现在我们可以在同一个地方同时拥有 linux 和 Windows 的解决方案!我怀疑 Windows 可能是罪魁祸首,因为我在其他一些 R 图形文档中读到某些东西在 Windows 上不起作用。我目前仅限于运行 Windows,非常感谢您的出色破解!
    • 这个问题整晚都在我的脑海里徘徊......我一直在查看图形输出,发现通过在jpeg()函数中使用type="cairo"产生了正确的非失真Windows 上的图像输出。您回答的问题在我的示例中可能没有那么明显地说明,因为我没有绘制任何实际数据点来保持它与输出有关,但它是我想要实现的重要部分。这将是我的下一个障碍,想​​知道为什么,哦为什么,情节没有一直延伸到图像的边缘。
    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 2012-03-21
    • 2019-03-09
    • 2014-11-15
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2012-10-04
    相关资源
    最近更新 更多