57 votes

dev.hold, dev.flush et redimensionnement des fenêtres

Dans R, il est possible de tenir un appareil, dessiner l'image, puis vider l'appareil pour rendre les graphiques. C'est utile pour de très complexe des parcelles avec des milliers de points de données, des dégradés de couleurs etc depuis sans se tenir, l'appareil devait être actualisé après chaque opération de traçage. Il fonctionne très bien.

Cependant, une fois que l'intrigue est en place, une fenêtre de fonctionnement comme le redimensionnement sera la cause de la parcelle à être actualisé -- cependant, cette fois sans la tenue et le rinçage de l'appareil, mais le tracé de la parcelle éléments un par un et de l'actualisation de l'affichage à chaque fois. C'est extrêmement gênant.

Clairement, je pouvais l'appeler manuellement dev.hold avant le redimensionnement de la fenêtre, mais ce n'est pas une vraie solution.

Est-il une façon de dire au R que le dispositif devrait être mis en attente pour des opérations telles que la redimensionner?

2voto

Artem Points 13

Comme indiqué par Dan Slone et gdkrmr option viable est d'utiliser intermédiaire fichier raster de tracer des graphiques complexes.

Le flux est la suivante:

  1. Enregistrer parcelle à l' png le fichier.
  2. Tracé de l'image dans l'écran de l'appareil.

Après cela, il n'y aura pas de problèmes avec l'actualisation et le redimensionnement.

Veuillez voir le code ci-dessous:

# 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)

Sortie: picture

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X