R анимированный сюжет: линейный график не строит линию - PullRequest
0 голосов
/ 25 сентября 2018

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

Есть предложения?

Данные:

CH4

X FIRST SECOND
1 1 23.9 71.9
2 2  2.9 23.7
3 3 85.7  6.0
4 4  1.2 94.0
5 5  1.1 66.8
6 6  1.5 99.9

Код:

plot_ly(CH4, x=~X, y=~FIRST, name="FIRST",
        hoverinfo = 'text',
        text = ~paste('Test Round: ', CH4$X, '<br>',
                      'Concentration: ', CH4$SECOND),
        type = "scatter", mode = "plines", frame=~frame) %>%
  add_trace(x=~X, y = ~SECOND, name="SECOND", mode = 'plines') %>%

  layout(yaxis = list(title = "CH4 Concentrations"), xaxis = list(title = 
 "Test Round"))

1 Ответ

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

Вы можете найти решение здесь .
Исходя из ваших данных, вам нужно сгенерировать накопленный фрейм данных, используя, например, функцию accumulate_by, определенную ниже.

dts <- read.table(text="
X FIRST SECOND
1 1 23.9 71.9
2 2  2.9 23.7
3 3 85.7  6.0
4 4  1.2 94.0
5 5  1.1 66.8
6 6  1.5 99.9
", header=T)

library(plotly)
library(lazyeval)
library(dplyr)
accumulate_by <- function(dat, var) {
  var <- f_eval(var, dat)
  lvls <- plotly:::getLevels(var)
  dats <- lapply(seq_along(lvls), function(x) {
    cbind(dat[var %in% lvls[seq(1, x)], ], frame = lvls[[x]])
  })
  bind_rows(dats)
}

CH4 <- dts %>% accumulate_by(~X)
head(CH4, 10)
#    X FIRST SECOND frame
# 1  1  23.9   71.9     1
# 2  1  23.9   71.9     2
# 3  2   2.9   23.7     2
# 4  1  23.9   71.9     3
# 5  2   2.9   23.7     3
# 6  3  85.7    6.0     3
# 7  1  23.9   71.9     4
# 8  2   2.9   23.7     4
# 9  3  85.7    6.0     4
# 10 4   1.2   94.0     4

Теперь ваш код работает правильно:

plot_ly(CH4, x=~X, y=~FIRST, frame=~frame, 
        name='FIRST',  hoverinfo = 'text',
        text = ~paste('Test Round: ', CH4$X, '<br>',
                      'Concentration: ', CH4$SECOND),
        type = 'scatter', mode = 'plines') %>%
  add_trace(x=~X, y = ~SECOND, name='SECOND', mode = 'plines') %>%
  layout(yaxis = list(title = 'CH4 Concentrations'), 
         xaxis = list(title = 'Test Round'))

enter image description here

...