Home > Mobile >  Add multiple e_mark_line in echarts4r using a loop or map or lapply
Add multiple e_mark_line in echarts4r using a loop or map or lapply

Time:01-04

I would like to set multiple e_mark_line using lapply or 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_mark_line(data = list(xAxis=remarks$time[1] ), title = remarks$comment[1]) %>% 
  e_mark_line(data = list(xAxis=remarks$time[2] ), title = remarks$comment[2]) %>% 
  e_mark_line(data = list(xAxis=remarks$time[3] ), title = remarks$comment[3]) 

I tried the following code to add multiple e_mark_lines using pmap but it does not work:

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_mark_line(data=list(xAxis=..1),title==..2))}

CodePudding user response:

Not sure whether this could be achieved via pmap. For me the more more natural way to achieve your desired result would be to use purrr::reduce2 instead of pmap like so:

library(echarts4r)
library(magrittr)
library(purrr)


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") %>%
  reduce2(
    .x = remarks$time, .y = remarks$comment,
    .f = function(x, y, z) e_mark_line(x, data = list(xAxis = y), title = z),
    .init = .
  )

enter image description here

DATA

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 <- data.frame(time, value = cumsum(white.noise))

remarks <- data.frame(
  time = sample(time, 10),
  comment = paste("test", sample(1:100, 10))
)
  •  Tags:  
  • Related