Вы можете найти решение здесь .
Исходя из ваших данных, вам нужно сгенерировать накопленный фрейм данных, используя, например, функцию 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'))