Animaciones

El discreto encanto de las animaciones

Representando datos, una animación es un gráfico en el que unas facetas (en terminología de ggplot2) ocultan el resto, como en

extraído de aquí y que representa la evolución del tamaño (superficie) de los coches habituales a lo largo del último siglo. Lo mismo pero evitando el indeseado efecto:

El código:

library(ggplot2)

datos <- structure(list(year = c(1930L,
  1950L, 1960L, 1970L,
  1980L, 1990L, 2000L, 2010L, 2018L),
  width = c(1.45, 1.59, 1.54, 1.56, 1.64,
           1.67, 1.75, 1.76, 1.78),
  length = c(3.38, 4.02, 3.96, 3.89, 3.98,
           4, 4.18, 4.12, 4.23)),
  class = "data.frame", row.names = c(NA, -9L))

ggplot(datos, aes(xmin = 0, ymin = 0,
  xmax = length, ymax = width)) +
  geom_rect() +
  coord_fixed() +
  facet_wrap(~ year) +
  xlab("longitud (m)") +
  ylab("anchura (m)") +
  ggtitle("Evolución de la superficie\ndel coche 'promedio'")

Virguería con R

R

A la pregunta, tal vez con una formulación mejorable de un usuario de la lista de R, sobre cómo representar una distribución normal bivariada con correlación 0.5 en 3D di ayer esta solución:

library(mvtnorm )

x <- y <- -20:20 / 10
z <- matrix(0, length(x ), length(y ) )

m <- c(0,0)
sigma <- matrix(c(1, 0.5, 0.5, 1 ), 2 )

for(i in 1: length(x ) )
        for(j in 1:length(y ) )
                z[i,j] <- dmvnorm(c(x[i], y[j] ), c(0,0), sigma )

persp(x, y, z )

No obstante, la solución alternativa de Carlos Ortega es toda una virguería que merece ser reproducida en estas páginas: