dev.hold, dev.flush y redimensionar ventanas
device window-resize (1)
Como lo indica Dan Slone y la opción viable de gdkrmr es usar un archivo de trama intermedio para trazar gráficos complejos.
El flujo es el siguiente:
-
Guardar trazado en archivo
png
. - Trace la imagen en el dispositivo de pantalla.
Después de esto, no habrá problemas con la actualización y el cambio de tamaño.
Por favor vea el código a continuación:
# 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)
En R, es posible sostener un dispositivo, dibujar la imagen y luego enjuagar el dispositivo para representar los gráficos. Esto es útil para gráficos muy complejos con miles de puntos de datos, gradientes de color, etc., ya que sin mantenerlo, el dispositivo se actualizará después de cada operación de trazado. Funciona bastante bien
Sin embargo, una vez que la trama esté en su lugar, cualquier operación de ventana, como un cambio de tamaño, hará que la trama se actualice; sin embargo, esta vez sin mantener y enjuagar el dispositivo, sino trazando los elementos de la trama uno por uno y actualizando la pantalla cada vez . Esto es extremadamente molesto.
Claramente, podría llamar manualmente a
dev.hold
antes de cambiar el tamaño de la ventana, pero esta no es una solución real.
¿Hay alguna manera de decirle a R que el dispositivo debe quedar en espera para operaciones como cambiar el tamaño?