Как включить уникальные переменные группировки в заголовки и имена файлов при использовании plotly? - PullRequest
0 голосов
/ 05 февраля 2020

Я учусь использовать plotly. У меня есть набор данных, похожий на data, созданный ниже. Графики. html, созданные с использованием приведенного ниже кода, работают так, как я хочу; уникальный "интерактивный" сюжет создается для каждого уникального ID. Однако у меня возникают проблемы с включением моей переменной группировки Group. Я хотел бы, чтобы имя переменной группировки было включено в заголовок каждого графика и имя каждого файла. Например, название сюжета, созданного ниже, скажет "plot_for_ID_A". Я хочу, чтобы он сказал "plot_for_Alpha_A", где Alpha относится к переменной группировки. Я пробовал несколько вещей в функции вставки, я пытался поместить filter(group==.y) в вызов filter(), чтобы я мог ссылаться на .y в вызове paste(), и некоторые другие вещи, которые не работали. Каков наилучший способ сделать это?

library(tidyverse)
library(plotly)

ID <- rep(c("A","B","C","D","E","F"), each=1000)
Group <- rep(c("alpha","beta"), each = 3000)
time <- rep(c(1:1000), times = 6)
one <- rnorm(6000)
two <- rnorm(6000)  
three <- rnorm(6000)
four <- rnorm(6000)
five<-rnorm(6000)
data <- data.frame(cbind(ID,Group,time,one,two,three,four,five),
                  stringsAsFactors = FALSE)

data_long <- data %>%
pivot_longer(-c(ID:time), names_to="Variable", values_to="Value")%>% 
  mutate(time = as.numeric(time),
         value = as.numeric(Value))


walk(unique(data_long$ID),
    ~ htmlwidgets::saveWidget(ggplotly(data_long %>% 
                                filter(ID == .x) %>% 
                                ggplot(aes(x = time, 
                                           y = value, 
                                           color = Variable)) +
                                geom_point() +
                                labs(title = paste(.x))),
                              paste("plot_for_ID_", .x, ".html", sep = "")))

Кроме того, вывод этого кода создает уникальный файл. html для каждого графика. Есть ли способ вставить все графики в один файл, где каждый график имеет свою страницу?

1 Ответ

2 голосов
/ 05 февраля 2020

Вы можете использовать group_split, чтобы разделить данные по группам и получить название графика из значений его столбцов.

library(tidyverse)
library(plotly)

data_long %>%
  group_split(ID, Group) %>%
  map(~ htmlwidgets::saveWidget(ggplotly(
                                  ggplot(.x, aes(x = time, 
                                                 y = value, 
                                              color = Variable)) +
                                   geom_point() +
               labs(title = paste0("plot_for_", .x[[2]][1], "_", .x[[1]][1]))),
               paste0("plot_for_", .x[[2]][1], "_", .x[[1]][1], ".html")))
...