heatmap densidad de línea en R

CodeNoob:

Descripción del problema
que tengo miles de líneas (~ 4000) que quiero trama. Sin embargo, es inviable para trazar todas las líneas usando geom_line()y sólo tiene que utilizar por ejemplo alpha=0.1para ilustrar donde hay una alta densidad de líneas y dónde no. Me encontré con algo similar en Python , especialmente el segundo gráfico de las respuestas se ve muy bien, pero no lo hago ahora, si algo similar puede conseguirse en ggplot2. Por lo tanto algo como esto:introducir descripción de la imagen aquí

Un ejemplo de datos
Sería mucho más sentido para demostrar esto con un juego que muestra un patrón, pero por ahora me acaba de generar curvas de los senos al azar:

set.seed(1)
gen.dat <- function(key) {
    c <- sample(seq(0.1,1, by = 0.1), 1)
    time <- seq(c*pi,length.out=100)
    val <- sin(time)
    time = 1:100
    data.frame(time,val,key)
}
dat <- lapply(seq(1,10000), gen.dat) %>% bind_rows()

Heatmap intentado
He intentado un mapa de calor como aquí la respuesta , sin embargo, este mapa de calor no tendrá en cuenta la conexión de los puntos sobre el eje completa (como en una línea), sino más bien mostrar el "calor" por punto de tiempo.

Pregunta
¿Cómo podemos, en I, utilizando ggplot2parcela de un mapa de calor de líneas de parecida a la mostrada en la primera figura?

Robin Gert Bach:

Sus datos dará lugar a una densidad de lunares bastante uniforme.

Me genera unos datos ligeramente más interesantes de esta manera:

gen.dat <- function(key) {
  has_offset <- runif(1) > 0.5
  time <- seq(1, 1000, length.out = 1000)
  val <- sin(time / 100 + rnorm(1, sd = 0.2) + (has_offset * 1.5)) * 
    rgamma(1, 20, 20)
  data.frame(time,val,key)
}
dat <- lapply(seq(1,1000), gen.dat) %>% bind_rows()

A continuación, obtener una estimación de la densidad 2d. kde2d no tiene una predictfunción para la modelamos con un loess

dens <- MASS::kde2d(dat$time, dat$val, n = 400)
dens_df <- data.frame(with(dens, expand_grid( y, x)), z = as.vector(dens$z))
fit <- loess(z ~ y * x, data = dens_df, span = 0.02)
dat$z <- predict(fit, with(dat, data.frame(x=time, y=val)))

El trazado se obtiene este resultado a continuación:

ggplot(dat, aes(time, val, group = key, color = z)) +
  geom_line(size = 0.05) +
  theme_minimal() +
  scale_color_gradientn(colors = c("blue", "yellow", "red"))

introducir descripción de la imagen aquí

Todo esto es altamente dependiente de:

  • El número de serie
  • La resolución de la serie
  • La densidad de kde2d
  • El lapso de loess

Así que su millaje puede variar

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=370084&siteId=1
Recomendado
Clasificación