gpt4 book ai didi

javascript - 当绘制的数据被更改时,在 R 中更新而不重新创建小部件

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:10:15 24 4
gpt4 key购买 nike

每次由 R 在 shiny 中(或仅在 R 中)创建一个 plotly 对象时,都会完全重新创建小部件。对于小数据集,这不是问题,但我正在处理包含数千个散点的图,这使得在我的 shinyapp 中重新创建一个图需要 10-20 秒。

我正在寻找一种通过 javascript 解决方案更新数据的方法,该解决方案不会触发要重建的小部件,而只是替换它的数据。

这是一个带有 2 个小数据集的虚拟应用程序,应用程序可以在这两个数据集之间切换。在虚拟应用程序中,它通过重新创建小部件来实现。由于数据点有限,这里速度相当快,但对于海量数据集来说并不理想。

如果有人知道如何实现这一点,那将是对我的应用程序的重大改进。

澄清:像这样的答案在这里:enter link description here不会为我做的伎俩。关键是,在我的应用程序中,数据在构建绘图后多次更改,因此我无法预加载数据帧列表。

我觉得解决方案必须是一个 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)

最佳答案

查看这些可能对您的案例有用的资源:

  1. Plotly R book通过 Carson Sievert第 3、4 和 6 章
  2. Plotly proxy function explanation

这是让您入门的代码。您需要做一些工作来调整轴标签,但这应该不难。

希望这对您有所帮助!

代码:

    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)

关于javascript - 当绘制的数据被更改时,在 R 中更新而不重新创建小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50304835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com