我想在R中的Shiny App中绘制一个Plotly图。我想要这样的功能,我想在循环中绘制一定数量的点(比如说20)。
这是我的Server.R代码: -
xAxis = vector("numeric", as.numeric(input$Generations))
yAxis = vector("numeric", as.numeric(input$Generations))
graphDF = data.frame(cbind(xAxis, yAxis))
for(i in 1 : 5)
{ output$GA = renderPlotly({
print(graphDF) # Testing
graphDF$yAxis[i] = i
graphDF$xAxis[i] = i
print(graphDF) # Testing
# Plotly functionality
p <- plot_ly(graphDF, x = graphDF$xAxis, y = graphDF$yAxis)
})
}
非常感谢任何帮助。
亲切的问候
答案 0 :(得分:3)
这比它看起来更复杂。看起来你想要迭代并创建一系列图形图形,随着时间的推移改变数据值。
因为Generations
滑块将矢量重新初始化为新的长度,
并且每次迭代都会改变正在绘制的数据的状态,您不能只是级联反应函数。将状态存储在reactiveValues
中是处理此问题的好方法。
主要变化如下:
reactiveValues
以存储xAxis
和yAxis
observeEvent
以在值更改时重新初始化这些值animate
参数,可能(可能)自己创建一个反应计时器。代码:
library(shiny)
library(plotly)
u <- fluidPage(
titlePanel("Iterations of a plotly graph"),
sidebarLayout(
sidebarPanel(
sliderInput("Generations","Number of Generations:",
min = 1, max = 50, value = 20),
sliderInput("iter", "Iteration range:",
value = 1, min = 1, max = 1000, step = 1,
animate=animationOptions(interval=800, loop=T)),
p("To start click on the blue arrowhead")
),
mainPanel(
plotlyOutput("GA")
)
))
s <- shinyServer(function(input,output){
rv <- reactiveValues(xAxis=NULL,yAxis=NULL)
observeEvent(input$Generations,{
rv$xAxis=vector("numeric", as.numeric(input$Generations))
rv$yAxis=vector("numeric", as.numeric(input$Generations))
})
output$GA = renderPlotly({
rv$yAxis[input$iter] <- input$iter
rv$xAxis[input$iter] <- input$iter
gdf <- data.frame(xAxis=rv$xAxis, yAxis=rv$yAxis)
plot_ly(gdf, x = ~xAxis, y = ~yAxis, type="scatter",mode="markers")
})
})
shinyApp(u,s)
因为它是动态的,你必须运行它才能看到它是如何工作的,但这是经过几次迭代后的屏幕截图: