【问题标题】:Create R heatmap with no margins whatsoever创建没有任何边距的 R 热图
【发布时间】:2011-11-28 19:34:03
【问题描述】:

我正在尝试做一些表面上简单的事情:创建一个热图(即 2D 直方图)图像,具有指定的逐像素尺寸 (3600x3600),没有边距或轴标签随便。 p>

我可以使用 hist2d 函数成功地创建我的数据矩阵。但是,当我使用以下代码进行绘图时,我得到的图像文件确实是 3600x3600,但实际上包含 x 轴和 y 轴刻度线以及边缘上的一些空白。烦人的是,这个空白不是各向同性的——不同边有不同的数量——所以我不能把初始图像放大一点,把它读入 PhotoShop,然后把它剪成 3600x3600 以便只包含情节区域像素(虽然那样会很费力)。

par(mar=c(0,0,0,0)) # this *should* eliminate all margins, leaving only the plot area... right?
png("filename.png", w=3600, h=3600)
image(my_matrix, col=heat.colors(16))
dev.off()

奇怪的是,如果我只是在 Quartz 窗口中绘制图像(我在 MacBook Pro 上,仅供参考),这些标签和空格不会出现:

image(my_matrix, col=heat.colors(16)) # opens new window that looks perfect!

这可以正常工作,但没有办法(据我所知)以 pixels 为单位指定此绘图的大小,仅以 inches 为单位(通过 pin)。所以我不能只保存这个绘图窗口来获得我想要的 exact PNG。

我已经在这上面花了几天时间,但一无所获。有什么帮助吗? par(mar) 参数与某些绘图“设备”或其他东西的交互方式是否有些奇怪?...

【问题讨论】:

标签: image r plot


【解决方案1】:

在调用png 之后而不是之前执行par(mar=c(0,0,0,0))

【讨论】:

  • 效果很好。 (见上文。)谢谢!
【解决方案2】:

如果我将par 调用 设备激活之后,它可以工作(连同设置axes = FALSE 以摆脱轴:

png("~/Desktop/so/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=27)
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()

显然,我在此示例中使用了较小的图像尺寸。此示例代码来自?image

【讨论】:

  • 哈,好的,效果很好。我认为这将是一些简单的事情,但我不确定我是否会考虑尝试这种特定的改变。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
相关资源
最近更新 更多