Trace múltiples líneas de series de tiempo en 3D con ggplot / plotly

Nov 16 2020

Tengo un marco de datos que contiene diferentes señales de series de tiempo que estoy tratando de trazar en 3D, con el eje x representando el tiempo, el eje Y representando un valor estandarizado para todas las líneas y el eje Z mostrando cada línea . He aquí un ejemplo de lo que quiero decir.

Tengo un fragmento de código que estoy tratando de configurar ahora para generarlo correctamente, pero no estoy seguro de cómo asignar correctamente las variables y y z. El df contiene 5 columnas; Tiempo + 4 señales de series temporales diferentes.

plot_ly(
  data = df,
  x = df$Time,
  y = scale(df),
  z = names(df),
  type = 'scatter3d',
  mode = 'lines',
  color = c('red', 'blue', 'yellow', 'green'))

El marco de datos se ve así:

      Time       coup.nu          Coup.nuti       coup.Ca       coup.B
1  198.001  0.0002630826       0.0003027965  2.141347e-07            1
2  198.002  0.0002630829       0.0003027953  2.141379e-07            1
3  198.003  0.0002630833       0.0003027940  2.141412e-07            1
4  198.004  0.0002630836       0.0003027928  2.141444e-07            1
5  198.005  0.0002630840       0.0003027916  2.141477e-07            1

Estoy tratando de usar plotly o ggplot para realizar el render. ¡Gracias por la ayuda!

Obtuve esto de: https://www.r-bloggers.com/2016/06/3d-density-plot-in-r-with-plotly/

Respuestas

ismirsehregal Nov 18 2020 at 08:19

En un caso como este, debe reformatear sus datos de ancho a largo usando, por ejemplo melt:

library(plotly)
library(reshape2)

DF <- data.frame(
        Time = c(198.001, 198.002, 198.003, 198.004, 198.005),
     coup.nu = c(0.000263083,0.000263083,0.000263083, 0.000263084,0.000263084),
   Coup.nuti = c(0.000302797,0.000302795,0.000302794, 0.000302793,0.000302792),
     coup.Ca = c(2.14e-07, 2.14e-07, 2.14e-07, 2.14e-07, 2.14e-07),
      coup.B = c(1L, 1L, 1L, 1L, 1L)
)
DF_long <- melt(DF, id.vars=c("Time"))

plot_ly(
  data = DF_long,
  type = 'scatter3d',
  mode = 'lines',
  x = ~ Time,
  y = ~ value,
  z = ~ variable,
  color = ~ variable,
  colors = c('red', 'blue', 'yellow', 'green'))

Si desea evitar remodelar su data.frame, puede usar add_tracepara agregar un nuevo rastro para cada columna de sus datos.