image.plot不会创建新图像

时间:2012-08-03 15:41:47

标签: r plot

以下是生成图像图的代码示例。但由于某种原因,当我重新运行它时,没有创建新图像,但它覆盖了现有的图。但是我希望它能够创建一个新图像,当然它有一个特定的参数'add'来指定它必须添加到现有的图中(但默认值为FALSE)。

有人知道这里发生了什么吗?

require(fields)

mat <- matrix(runif(5*5), ncol=5) 

mat[1,3] <- NA

image.plot(seq(1,5,1),seq(1,5,1), mat, col = tim.colors(64), legend.only=TRUE)
par(oma=c(0,0,0,6))
par(new = TRUE)
image(seq(1,5,1),seq(1,5,1),matrix(1,5,5), col = gray(0.8), xlab = "", ylab = "", axes = F)
par(new = TRUE)
image(seq(1,5,1),seq(1,5,1),mat, xlab="Hour of the Day", ylab = "Day of the Week", col = tim.colors(64), axes = F)
par(oma=c(0,0,0,0))

修改 我对设备等了解不多。但我确实知道(我在RStudio工作)当我做第一个plot(1:10)然后plot(10:1)时,数字窗口被清除,第二个图在没有被添加到第一个的情况下显示(在RStudio中你有一个额外的功能,你也可以浏览你以前的数字,但如果我在普通的R控制台中做同样的事情,当第二个图是所谓的)。并且 是我想要的,我只是希望在我第二次调用image.plot时清除数字窗口,而不是覆盖上次调用image.plot时的图像。

2 个答案:

答案 0 :(得分:3)

您注意到par的“新”参数意义上的奇怪逆转。这是帮助页面描述:

new

logical, defaulting to FALSE. If set to TRUE, the next high-level plotting command 
(actually plot.new) should not clean the frame before drawing as if it were on a new 
device. It is an error (ignored with a warning) to try to use new = TRUE on a device 
that does not currently contain a high-level plot.

答案 1 :(得分:0)

我认为如果您在legend.only=T命令中设置image.plot,它会自动设置par(new=TRUE)。如果您先绘制图像,然后添加图例,则可以正常工作。在这里你必须留下一个par(new=TRUE)

require(fields)

mat <- matrix(runif(5*5), ncol=5) 

mat[1,3] <- NA

par(oma=c(0,0,0,6))
#par(new = TRUE)
image(seq(1,5,1),seq(1,5,1),matrix(1,5,5), col = gray(0.8), xlab = "", ylab = "", axes = F)
par(new = TRUE)
image(seq(1,5,1),seq(1,5,1),mat, xlab="Hour of the Day", ylab = "Day of the Week", col = tim.colors(64), axes = F)
par(oma=c(0,0,0,0))
image.plot(seq(1,5,1),seq(1,5,1), mat, col = tim.colors(64), legend.only=TRUE)