我试图做表面上是简单的事情:创建一个热图(即2D柱状图),图像与指定的逐像素尺寸(3600x3600),没有利润或轴标签任何.
我可以使用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()
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我只是在Quartz窗口中绘制图像(我在MacBook Pro,FYI上),那些标签和空白就不会出现:
image(my_matrix, col=heat.colors(16)) # opens new window that looks perfect!
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但我无法(我知道)以像素为单位指定此图的大小,仅以英寸为单位(通过引脚).所以我不能只保存这个绘图窗口以获得我想要的确切 PNG.
我已经花了几天时间在这上面而且无处可去.有帮助吗?par(mar)参数如何与某些绘图"设备"或其他东西相互作用,是否有些奇怪?...
如果我在设备激活后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()
Run Code Online (Sandbox Code Playgroud)

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