我希望R曲线图在数据更改时能够平稳过渡。我不希望R-plotly提供动作按钮方法。因此,我尝试通过idx messages
112 I have a car and it is blue
114 I have a bike and it is red
115 I don't have any car
117 I don't have any bike
按照链接的示例获取动画:
https://plot.ly/javascript/plotlyjs-function-reference/#plotlyanimate
我的应用程序正在运行,但情节未设置动画。我丢失了一些东西。
id 112 114 115 117
id
112 100.0 78.0 51.0 50.0
114 78.0 100.0 47.0 54.0
115 51.0 47.0 100.0 83.0
117 50.0 54.0 83.0 100.0
答案 0 :(得分:0)
原来,我只需要修改列表结构。 此外,条形痕迹目前无法以情节方式进行动画处理,因此我不得不使用粗线来伪造它。
library(shiny)
library(plotly)
library(dplyr)
ui <- fluidPage(
actionButton("go", "Click to recalc"),
plotlyOutput("plot")
)
gendata <- function(){
ndata <- 10
d <- tibble(text=LETTERS[1:ndata], f=1, x=runif(ndata)) %>% mutate(r = rank(x))
rbind(mutate(d, x=-1), d, mutate(d, x=-1)) %>%
arrange(text)
}
server <- function(input, output, session){
origdata <- gendata()
if (FALSE){ # for offline testing
print(head(origdata))
my <- list(olddata = origdata, newdata = origdata)
}
my <- reactiveValues(
olddata = origdata,
newdata = origdata
)
output$plot <- renderPlotly({
cat("renderPlotly\n")
plot_ly() %>%
add_trace(x=origdata$x, y=origdata$r, frame=origdata$f, line=list(width=20, simplify=FALSE), type="scatter", opacity=0.5, mode="lines", name="Rank") %>%
add_trace(x=origdata$x + 0.02, y=origdata$r, frame=origdata$f, text=origdata$text, type="scatter", mode="text", showlegend=FALSE) %>%
layout(xaxis=list(range=list(0,1.1))) %>%
animation_opts(frame=500, transition=500, redraw=FALSE)
})
observeEvent(input$go, {
req(my$newdata)
cat("observeEvent input$go\n")
my$olddata <- my$newdata # save old data
my$newdata <- gendata() %>% # generate new data
mutate(f=my$olddata$f+1)
print(head(my$newdata))
# https://plot.ly/javascript/plotlyjs-function-reference/#plotlyanimate
plotlyProxy("plot", session=session, deferUntilFlush=FALSE) %>%
plotlyProxyInvoke("animate",
# frameOrGroupNameOrFrameList
list(
data = list(list(
x = my$newdata$x,
y = my$newdata$r,
frame = my$newdata$f
),
list(
x = my$newdata$x + 0.02,
y = my$newdata$r,
text = my$newdata$text,
frame = my$newdata$f
)),
traces = list(as.integer(0), as.integer(1)),
layout = list()
),
# animationAttributes
list()
)# plotlyProxyInvoke
})
}
shinyApp(ui, server)