Frames
Now, along with data and layout, frames is added to the keys that figure allows. Your frames key points to a list of figures, each of which will be cycled through upon instantiation of the plot.
Cumulative Lines Animation
library(plotly)accumulate_by<-function(dat,var){var<-lazyeval::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]])})dplyr::bind_rows(dats)}df<-txhousingfig<-df%>%filter(year>2005,city%in%c("Abilene","Bay Area"))fig<-fig%>%accumulate_by(~date)fig<-fig%>%plot_ly(x=~date,y=~median,split=~city,frame=~frame,type='scatter',mode='lines',line=list(simplyfy=F))fig<-fig%>%layout(xaxis=list(title="Date",zeroline=F),yaxis=list(title="Median",zeroline=F))fig<-fig%>%animation_opts(frame=100,transition=0,redraw=FALSE)fig<-fig%>%animation_slider(hide=T)fig<-fig%>%animation_button(x=1,xanchor="right",y=0,yanchor="bottom")figFilled-Area Animation
library(plotly)library(quantmod)getSymbols("AAPL",src='yahoo')## [1] "AAPL"
df<-data.frame(Date=index(AAPL),coredata(AAPL))df<-tail(df,30)df$ID<-seq.int(nrow(df))accumulate_by<-function(dat,var){var<-lazyeval::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]])})dplyr::bind_rows(dats)}df<-df%>%accumulate_by(~ID)fig<-df%>%plot_ly(x=~ID,y=~AAPL.Close,frame=~frame,type='scatter',mode='lines',fill='tozeroy',fillcolor='rgba(114, 186, 59, 0.5)',line=list(color='rgb(114, 186, 59)'),text=~paste("Day: ",ID,"<br>Close: $",AAPL.Close),hoverinfo='text')fig<-fig%>%layout(title="AAPL: Last 30 days",yaxis=list(title="Close",range=c(0,250),zeroline=F,tickprefix="$"),xaxis=list(title="Day",range=c(0,30),zeroline=F,showgrid=F))fig<-fig%>%animation_opts(frame=100,transition=0,redraw=FALSE)fig<-fig%>%animation_slider(currentvalue=list(prefix="Day "))figReference
To read more on animations see The Plotly Book.
What About Dash?
Dash for R is an open-source framework for building analytical applications, with no Javascript required, and it is tightly integrated with the Plotly graphing library.
Learn about how to install Dash for R at https://dashr.plot.ly/installation.
Everywhere in this page that you see fig, you can display the same figure in a Dash for R application by passing it to the figure argument of the Graph component from the built-in dashCoreComponents package like this:
library(plotly)fig<-plot_ly()# fig <- fig %>% add_trace( ... )# fig <- fig %>% layout( ... ) library(dash)library(dashCoreComponents)library(dashHtmlComponents)app<-Dash$new()app$layout(htmlDiv(list(dccGraph(figure=fig))))app$run_server(debug=TRUE,dev_tools_hot_reload=FALSE)