【问题标题】:Cannot get rid of one-pixel-wide white margins (bottom and right side) of plot无法摆脱绘图的一个像素宽的白色边距(底部和右侧)
【发布时间】:2013-10-14 08:38:08
【问题描述】:

我正在尝试使用image() 绘制和保存我的矩阵,没有轴、标签、边距等。我需要的只是纯彩色图像,其中单元格的数量将对应于保存的绘图上的像素数。在 R 图形设备上它看起来不错,但是如果我将绘图保存到文件中,那么图像的底部和右侧总是会保留一个像素宽的白色边距。我尝试了所有格式,但没有成功。我正在使用 GIMP 进行图像处理。

示例代码:

png("heatmap.png",w=400,h=400)
par(mar = c(0,0,0,0))
require(grDevices) # for colours
x <- y <- seq(-4*pi, 4*pi, len=400)
r <- sqrt(outer(x^2, y^2, "+"))
image(z = z <- cos(r^2)*exp(-r/6), col=gray((0:32)/32),axes = FALSE)
dev.off()

【问题讨论】:

  • 看来这是值得报告的错误。
  • @Thomas 但错误可能WindowsGDI 设备驱动程序中? (我假设您的意思是为 R 核心提交错误报告)

标签: r plot


【解决方案1】:

我将继续假设您使用的是 Windows。 png 似乎默认使用WindowsGDI 设备进行绘图。改用 cairographics,通过设置 type = "cario"...

png("heatmap.png",w=400,h=400 , type="cairo" )

边框消失。关于WindowsGDI 设备出现这种情况的答案可能在grDevices::windows 帮助页面上找到...

【讨论】:

  • +1 - 此选项更普遍适用 - useRaster=TRUE 选项要求“网格必须是规则的...”。
  • @Marcinthebox 感谢,但无论如何来自 WindowsGDI 设备的奇怪行为。
【解决方案2】:

通过使用参数useRaster=TRUE,问题解决了:

png("heatmap.png",w=400,h=400)
par(mar = c(0,0,0,0))
require(grDevices) # for colours
x <- y <- seq(-4*pi, 4*pi, len=400)
r <- sqrt(outer(x^2, y^2, "+"))
z <- cos(r^2)*exp(-r/6)
image(z, col=gray((0:32)/32), axes=FALSE, useRaster=TRUE)
dev.off()

【讨论】:

    最近更新 更多