Mar*_*ark 5 javascript r shiny plotly
每次由 R 在 Shiny 中(或仅在 R 中)创建一个 plotly 对象时,都会完全重新创建小部件。对于小数据集,这不是问题,但我正在处理包含数千个散点的图,因此在我的 Shinyapp 中重新创建图需要 10-20 秒。
我正在寻找一种通过 javascript 解决方案更新数据的方法,该解决方案不会触发小部件重建,而只是替换它的数据。
这是一个带有 2 个小数据集的虚拟应用程序,应用程序可以在这些数据集之间进行切换。在虚拟应用程序中,它通过重新创建小部件来实现。由于数据点有限,这里相当快,但对于海量数据集并不理想。
如果有人知道如何做到这一点,这将是我的应用程序的重大改进。
澄清: 这里的答案是这样的:在此处输入链接描述对我不起作用。关键是,在我的应用程序中,在构建绘图后数据已更改多次,因此我无法预加载数据框列表。
我有一种感觉,解决方案必须是一个 javascript 解决方案,可以获取数据以覆盖当前绘制的数据,但不确定如何或是否可以做到这一点。
library("shiny")
library("plotly")
ui <- fluidPage(
selectInput("dataset", "Choose a dataset:", choices = c("rock", "mtcars")),
plotlyOutput("Plot1")
)
server <- function(input, output, session) {
dataSource <- reactive({switch(input$dataset,"rock" = rock,"mtcars" = mtcars)})
output$Plot1 <- renderPlotly({plot_ly(data = dataSource(), x = dataSource()[,1],
y =dataSource()[,2], mode = 'markers', type = 'scatter')})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)
查看这些可能对您的案例有用的资源:
这是让您入门的代码。您需要做一些工作来调整轴标签,但这应该不难。
希望这可以帮助!
编码:
library("shiny")
library("plotly")
ui <- fluidPage(
selectInput("dataset", "Choose a dataset:", choices = c("rock", "mtcars")),
plotlyOutput("Plot1")
)
server <- function(input, output, session) {
dataSource <- reactive({switch(input$dataset,"rock" = rock,"mtcars" = mtcars)})
output$Plot1 <- renderPlotly({plot_ly(data = rock, x = ~area,
y =~peri, mode = 'markers', type = 'scatter')})
observeEvent(input$dataset, {
f <- list(
family = "Courier New, monospace",
size = 18,
color = "#7f7f7f"
)
x <- list(
title = "x Axis",
titlefont = f,
range = c(0, 1000)
)
y <- list(
title = "y Axis",
titlefont = f,
range = c(0, 100)
)
plotlyProxy("Plot1", session) %>%
plotlyProxyInvoke("addTraces", list(x = dataSource()[,1],
y = dataSource()[,2],
type = 'scatter',
mode = 'markers')) %>%
plotlyProxyInvoke("deleteTraces", list(as.integer(0))) %>%
plotlyProxyInvoke("relayout", list(xaxis = x, yaxis = y))
})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1099 次 |
| 最近记录: |