es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agregue múltiples e_mark_line en echarts4r utilizando un bucle, un map o lapply.

Me gustaría establecer múltiples e_mark_line utilizando lapply o pmap.

library(tidyverse)
library(lubridate)
library(echarts4r)

set.seed(1)
size = 24 * 20

time <-
  seq(
    from = as.POSIXct("2021-01-01 00:00", tz = "UTC"),
    length.out = size,
    by = "hour"
  )

white.noise <- rnorm(n = size)

test_df <- tibble(time, value = cumsum(white.noise))

remarks <-
  tibble(time = sample(time, 10),
         comment = paste("test", sample(1:100, 10)))

test_df %>%
  e_charts(x = time) %>%
  e_line(serie = value) %>%
  e_legend_select(1) %>%
  e_datazoom(type = "slider") %>%
  e_theme("dark") %>%
  e_tooltip(trigger = "axis") %>% 
  e_markline(data = list(xAxis=remarks$time[1]), title = remarks$comment[1]) %>% 
  e_markline(data = list(xAxis=remarks$time[2]), title = remarks$comment[2]) %>% 
  e_markline(data = list(xAxis=remarks$time[3]), title = remarks$comment[3])

He intentado el siguiente código para agregar múltiples e_mark_line utilizando pmap, pero no funciona:

test_df %>%
  e_charts(x = time) %>%
  e_line(serie = value) %>%
  e_legend_select(1) %>%
  e_datazoom(type = "slider") %>%
  e_theme("dark") %>%
  e_tooltip(trigger = "axis") %>% 
  {pmap(remarks, ~e_markline(data = list(xAxis = ..1), title = ..2))}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para agregar varias e_mark_line utilizando lapply o pmap, podemos modificar el código de la siguiente manera:

    “`{r}
    test_df %>%
    e_charts(x = time) %>%
    e_line(serie = value) %>%
    e_legend_select(1) %>%
    e_datazoom(type = “slider”) %>%
    e_theme(“dark”) %>%
    e_tooltip(trigger = “axis”) %>%
    lapply(seq_len(nrow(remarks)), function(i) {
    e_mark_line(data = list(xAxis = remarks$time[i]), title = remarks$comment[i])
    })


    Aquí, utilizamos `lapply` para recorrer cada fila de `remarks` y crear una `e_mark_line` para cada fila. Especificamos el parámetro `data` como una lista con un único elemento, `xAxis`, que se establece en el valor de `time` en esa fila. El parámetro `title` se establece en el valor de `comment` en esa fila. Alternativamente, podemos usar `pmap` de la siguiente manera: ```{r} test_df %>% e_charts(x = time) %>% e_line(serie = value) %>% e_legend_select(1) %>% e_datazoom(type = "slider") %>% e_theme("dark") %>% e_tooltip(trigger = "axis") %>% pmap(list(data = list(xAxis = remarks$time), title = remarks$comment), e_mark_line)

    Aquí, utilizamos pmap para iterar sobre dos listas: data y title. Pasamos estas listas a e_mark_line utilizando el argumento ....

Comments are closed.