Как вы могли бы поставить несколько рядов на линейную диаграмму в R блестящий, используя пакет Highcharter и без жесткого кодирования серии? - PullRequest
1 голос
/ 12 февраля 2020

Я пытаюсь создать линейную диаграмму, используя пакет highcharts с временным рядом данных, который похож на этот:

reprexDF <- data.frame(category = c("apples","oranges","bananas","limes"),
                          month1 = c(5,8,10,2),
                          month2 = c(NA,7,2,3),
                          month3 = c(NA, NA, 10,2),
                          month4 = c(11,12,5,9)
                          )

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

Я попытался проанализировать каждую строку в списке с помощью:

reprexDF <- highcharter::list_parse2(reprexDf)

, а затем попытался построить с помощью:

highchart() %>%
hc_plotOptions(line = list(marker = list(enabled = FALSE)))%>%
hc_add_series_list(reprexDF) 

но я все еще не могу подготовить эти данные.

Я просто очень хочу избежать жесткого кодирования каждой серии, потому что списки должны быть динамическими c.

1 Ответ

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

Сначала конвертирует ваш фрейм данных в long. Затем вы можете group_by category и использовать list_parse2 для создания списков по категориям.

Для этого графика я убедился, что month было цифрой c на оси x. Я переименовал category в name, чтобы оно появилось в легенде и ярлыках. И добавил connectNulls на тот случай, если вы хотите соединить точки с пропущенными значениями (NA).

library(highcharter)
library(tidyverse)

reprexDF2 <- reprexDF %>%
  pivot_longer(cols = -category, names_to = "month", values_to = "value", names_pattern = "month(\\d)$") %>%
  group_by(category) %>%
  do(data = list_parse2(data.frame(as.numeric(.$month), .$value))) %>%
  ungroup() %>%
  rename(name = category)

highchart() %>%
  hc_plotOptions(series = list(connectNulls = TRUE), line = list(marker = list(enabled = FALSE)))%>%
  hc_add_series_list(reprexDF2)

highcharter with lines

...