Почему highcharter дает случайный график (дата по оси абсцисс)? - PullRequest
0 голосов
/ 18 июня 2020

Здесь у меня есть 2 похожих фрейма данных, но график вывода отличается от highcharter.

Типы переменных аналогичны ... это случайное действие?

Возможно ли заставить highcharter дать график, похожий на второй (df2)?

Спасибо за помощь

EDITt 1: Я попытался преобразовать даты года в целые числа (и символы), но поведение худшее ..

РЕДАКТИРОВАТЬ 2: Я нашел решение, но думаю, что это ошибка ...

Данные и скрипт:

library(data.table)
library(highcharter)

df1 = structure(list(
  stat_motif = c("autre", "controle_cadastre", "doc_apres_travaux", 
                 "doc_apres_travaux", "doc_avant_travaux", "inconnu", "inconnu"),
  nb_stat_annee = c(1L, 10L, 4L, 1L, 1L, 601L, 573L), 
  annee_modif_stat = structure(c(18262, 18262, 18262, 17897, 18262, 18262, 17897), class = "Date"), 
  col_motif = c("#87CEEB", "#7CFC00", "#FAA43A", "#FAA43A", "#FF0000", "#C0C0C0", "#C0C0C0")), 
  class = "data.frame", row.names = c(NA, -7L), .Names = c("stat_motif", "nb_stat_annee", "annee_modif_stat", "col_motif"))

df2 = structure(list(
  stat = c("abandonne", "admissible", "admissible", 
                            "admissible", "finalise_pro", "refuse", "refuse"), 
  nb_stat = c(3L, 122L, 1L, 5L, 1L, 7L, 1L),
  annee_enreg_stat = structure(c(17532, 17897, 17532, 18262, 17897, 17897, 17532), class = "Date"),
  col = c("#FAA43A", "#7CFC00", "#7CFC00", "#7CFC00", "#264D00", "#FF0000", "#FF0000")), row.names = c(NA, -7L), class = "data.frame", .Names = c("stat", "nb_stat", "annee_enreg_stat", "col"))





setDT(df1)
setDT(df2)

# X-axis problem with this code
df1 = unique(df1[order(stat_motif)])
# EDIT 2 with 'solution'
# df1 = unique(df1[order(stat_motif, annee_modif_stat)])
# Or
# df1 = df1[stat_motif != "inconnu"]

col_vec = unique(df1[, col_motif])

hchart(
  as.data.frame(df1),
  "column", 
  hcaes(x = annee_modif_stat, y = nb_stat_annee, group = stat_motif)
) %>%
  hc_plotOptions(column = list(stacking = "normal"), type = "datetime") %>% 
  hc_xAxis(
    title = list(text = 'Date')
  ) %>% 
  hc_yAxis(
    title = list(text = "Nb")
  ) %>% 
  hc_add_theme(hc_theme_gridlight()) %>% 
  hc_colors(colors = col_vec)


df2 = unique(df2[order(stat), list(stat, nb_stat, annee_enreg_stat, col)])

col_vec = unique(df2[, col])

hchart(
  as.data.frame(df2),
  "column", 
  hcaes(x = annee_enreg_stat, y = nb_stat, group = stat)
) %>% 
  hc_plotOptions(column = list(stacking = "normal"), type = "datetime") %>% 
  hc_xAxis(
    title = list(text = 'Date')
  ) %>% 
  hc_yAxis(
    title = list(text = "Nb")
  ) %>% 
  hc_add_theme(hc_theme_gridlight()) %>% 
  hc_colors(colors = col_vec)

1 Ответ

0 голосов
/ 07 июля 2020

Для просмотра результатов Highcharter полезно назначить его объекту hc1 <- hchart(.... Обычно я смотрю на hc1$x$hc_opts$plotOptions и hc1$x$hc_opts$series.

В приведенных выше примерах Highcharter генерирует похожие объекты, за исключением данных (по сравнению с all.equal(hc1, hc2). ИМО, разные xAxis - это результаты из библиотеки Highcharts.

Чтобы заставить xAxis с годовыми столбцами, я бы рекомендовал преобразовать даты в строки года (df1$annee_modif_stat <- substr(df1$annee_modif_stat, 1,4)) и сгенерировать диаграмму с type = "category".

Документация Highcharts API полезна для поиска доступных параметры, и просмотрев объекты Highcharter, вы можете просмотреть объект перед преобразованием JSON.

...