我正在尝试做一些表面上简单的事情:创建一个具有指定像素尺寸(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)参数如何与某些绘图“设备”或其他东西相互作用是否有些奇怪?...
答案 0 :(得分:5)
如果我在设备激活后调用<{1}} ,它可以正常工作(同时设置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()
。
答案 1 :(得分:1)
在致电par(mar=c(0,0,0,0))
之后而不是之前做png
。