dev.hold,dev.flush和调整窗口大小

Jan*_*ary 56 r device window-resize

在R中,可以握住设备,绘制图片,然后刷新设备以渲染图形.这对于具有数千个数据点,颜色梯度等的非常复杂的绘图非常有用,因为在没有保持的情况下,设备将在每次绘图操作之后刷新.它运作得很好.

但是,一旦绘图到位,任何窗口操作(如调整大小)都会导致绘图刷新 - 但是,这次没有保持和刷新设备,而是逐个绘制绘图元素并每次刷新显示.这非常烦人.

显然,我可以dev.hold在调整窗口大小之前手动调用,但这不是一个真正的解决方案.

有没有办法告诉R设备应该暂停进行大小调整等操作?

Art*_*tem 2

Dan Slone 和 gdkrmr 指出,可行的选择是使用中间光栅文件来绘制复杂图形。

流程如下:

  1. 将绘图保存到png文件。
  2. 将图像绘制到屏幕设备中。

此后刷新和调整大小就不会出现问题了。

请看下面的代码:

# plotting through png
plot.png <- function(x, y) {
  require(png)
  tmp <- tempfile()
  png(tmp, width = 1920, height = 1080)
  plot(x, y, type = "l")
  dev.off()
  ima <- readPNG(tmp)
  op <- par(mar = rep(0, 4))
  plot(NULL, xlim = c(0, 100), ylim = c(0, 100), xaxs = "i", yaxs = "i")
  rasterImage(ima, 0, 0, 100, 100, interpolate = TRUE)
  par(op)
  unlink(tmp)
}

t <- 1:1e3
x <- t * sin(t)
y <- t * cos(t)


# without buffering
# plot(x, y, type = "l")

# with buffering in high-res PNG-file
plot.png(x, y)
Run Code Online (Sandbox Code Playgroud)

输出: 图片