plotly R: сохраняйте категориальные имена столбцов, но не создавайте их - PullRequest
0 голосов
/ 21 сентября 2018

С этим объектом:

fullDT <-
structure(list(QuarterAndYear = structure(1:12, .Label = c("2015 Q1", 
"2015 Q2", "2015 Q3", "2015 Q4", "2016 Q1", "2016 Q2", "2016 Q3", 
"2016 Q4", "2017 Q1", "2017 Q2", "2017 Q3", "2017 Q4"), class = "factor"), 
    `TRUE` = c(3, 0, 1, 0, 2, 1, 0, 1, 3, 0, 0, 0), `FALSE` = c(0, 
    0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0), OTHER = c(0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0)), class = c("data.table", "data.frame"
), row.names = c(NA, -12L), sorted = "QuarterAndYear")

Я могу построить график следующим образом:

plot_ly(fullDT,x = ~QuarterAndYear,y=0,type = "scatter",mode = "lines")%>%add_trace(y = ~`TRUE`)%>%add_trace(y = ~`FALSE`)%>%add_trace(y = ~OTHER)%>%layout(xaxis= list(type = "category"))

Что дает мне почти всеЯ нуждаюсь.А именно, он дает мне имена первых категорий столбцов в виде меток для оси x.Тем не менее, «след 0» появляется в легенде.Если я уберу это:

plot_ly(fullDT,type = "scatter",mode = "lines")%>%add_trace(y = ~`TRUE`)%>%add_trace(y = ~`FALSE`)%>%add_trace(y = ~OTHER)%>%layout(xaxis= list(type = "category"))

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

Я пробовал кое-что для макета (xaxis = list(...)), но безрезультатно ...

1 Ответ

0 голосов
/ 21 сентября 2018

При рисовании графика, вы можете начать с пустого и добавлять по ходу.Когда вы строите x без y, он добавляет trace0.Итак, нарисуйте график, который вы хотите, затем добавьте кривые, используя подмножество colNames, удалите из него свой x и проследите в цикле.

p <- plot_ly(type = 'scatter', mode = 'lines') %>% 
  layout(yaxis = list(title = "TRUE"))
colNames <- names(fullDT)
colNames <- colNames[-which(colNames == 'QuarterAndYear')]
for(trace in colNames){
  p <- p %>% plotly::add_trace(data = fullDT, x = ~ QuarterAndYear, y = as.formula(paste0("~`", trace, "`")), name = trace)
  print(paste0("~`", trace, "`"))
}
p

...