R Highcharter Водопад диаграммы X-оси и проблемы с цветом - PullRequest
0 голосов
/ 04 февраля 2020
library(highcharter)
df = data.frame(Name = c("Total","A","B","C","D"),
                Value = c(10,5,9,-1,-3))
df
   Name Value
1 Total    10
2     A     5
3     B     9
4     C    -2
5     D    -3

highchart() %>% 
  hc_chart(type = "waterfall") %>% 
  hc_xAxis(categories = df$Name) %>% 
  hc_add_series(data = df[1,2]) %>%
  hc_add_series(data = df[-1,2])

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

  1. A каким-то образом сгруппирован вместе с Total, хотя он отображается как Series 2 , В результате Value и Name не совпадали на графике;
  2. Я пробовал следующие коды, чтобы установить зеленый цвет для положительных значений и красный для отрицательных. Это работает для Total, но не для других.
library(dplyr)
df2= df %>%
  mutate(color = ifelse(df$Value>=0,"green",ifelse(df$Value<0,"red",NA)))
highchart() %>% 
  hc_chart(type = "waterfall") %>% 
  hc_xAxis(categories = df2$Name) %>% 
  hc_add_series(data = df2[1,2], color = df2[1,3]) %>%
  hc_add_series(data = df2[-1,2], colors = df2[-1,3])

1 Ответ

0 голосов
/ 04 февраля 2020

Я думаю, что ответ на первый вопрос, как указал @jbkunst здесь , заключается в том, что каждое значение является 0-индексным в первой категории при добавлении их в виде отдельных рядов. Я не уверен, возможно ли указать индекс для второго индекса. Я попытался добавить [1], но не сработало.

С точки зрения второго вопроса, ключ должен включать аргумент isSum. Однако проблема в том, что расчет идет только слева направо. Вот что я имею в виду: если isSum = c(FALSE,FALSE,FALSE,FALSE,TRUE), то D станет 23, что является суммой предыдущих четырех значений. Теперь, если isSum = c(TRUE,FALSE,FALSE,FALSE,FALSE), тогда Total станет 0, потому что перед ним нет номера.

При этом найденный мной рабочий раствор двигал Total в конец:

df2 = data.frame(Name = c("A","B","C","D","Total"),
                Value = c(5,9,-1,-3,10))
a = c(FALSE,FALSE,FALSE,FALSE,TRUE)
df2= df2 %>%
  mutate(color = ifelse(df2$Value>=0,"green",ifelse(df2$Value<0,"red",NA)))
highchart() %>%
  hc_xAxis(type = "category") %>%
  hc_add_series(data = df2, type = "waterfall", hcaes(x = Name, y= Value, isSum = a, color = df2$color))
...