无任何边距创建R热图

时间:2011-09-30 22:05:45

标签: image r plot

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

我可以使用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,FYI上),那些标签和空白就不会出现:

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

这样可以正常工作,但我无法(我知道)在像素中指定此图的大小,只需英寸(通过引脚)。所以我不能只保存这个绘图窗口以获得我想要的完全 PNG。

我已经花了几天时间在这上面而且无处可去。有帮助吗? par(mar)参数如何与某些绘图“设备”或其他东西相互作用是否有些奇怪?...

2 个答案:

答案 0 :(得分:5)

如果我在设备激活后调用<{1}} ,它可以正常工作(同时设置par以摆脱轴:

axes = FALSE

enter image description here

显然,我在这个例子中使用了较小的图像尺寸。此示例代码来自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()

答案 1 :(得分:1)

在致电par(mar=c(0,0,0,0))之后而不是之前做png