当绘制的数据发生更改时,在 R 中更新绘图,无需重新创建小部件

2024-04-22

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

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

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

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

澄清:这里有一个像这样的答案:在此输入链接描述 https://stackoverflow.com/questions/40024029/plotly-updating-data-with-dropdown-selection不会对我有用。关键是,在我的应用程序中,数据在构建绘图后多次更改,因此我无法预加载数据框列表。

我感觉该解决方案必须是一个 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 书 https://plotly-book.cpsievert.me/ by 卡森·西弗特 https://stackoverflow.com/users/1583084/carson第 3、4 和 6 章
  2. plotly代理函数解释 https://plot.ly/r/plotlyproxy/

这是帮助您入门的代码。您需要做一些调整轴标签的工作,但这应该不那么困难。

希望这可以帮助!

代码:

    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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当绘制的数据发生更改时,在 R 中更新绘图,无需重新创建小部件 的相关文章

随机推荐

  • 将子 DIV 移到父 DIV 之外

    我就直接进入正题吧 我有一个宽度为 100 的子 div 它位于具有固定宽度的包装器下 我想知道如何使子 div 突破 并具有 100 全屏页面宽度 代码是这样的 我尝试使用相对 绝对定位 但没有运气 div class wrapper S
  • (二进制、NDK)C 应用程序与 Java 应用程序的反编译(Dalvik 字节码)

    Well 由于我对重新设计很感兴趣 到目前为止我在 Android 重新设计上花费了大量时间 尽管如此 我还是遇到了编译二进制 C 代码 NDK 的问题 并且我知道将其反编译回 C C 比将 DEX 文件反编译回或多或少要困难得多 以及Ja
  • 检查数据库是否存在并且当前登录可以访问

    我知道我可以使用 检查数据库是否存在 SELECT FROM sys databases WHERE name database name or SELECT DB ID database name 无论当前登录是否有权访问 都可以执行此检
  • 将 Microsoft.SqlServer.Types 与 Dapper 一起使用时出现 RuntimeBinderInternalCompilerException

    使用目标平台设置为以下之一的 Sql Server Data Tools 项目 SQL Server 2008 SQL Server 2012 SQL Server 2014 并部署到 localdb Projects 或 localdb
  • 如何使用 JSHint 禁用有关“this”和严格模式的警告?

    我正在使用 AngularJS v1 5 编写一个 Web 应用程序 因此我有一些控制器 在这些控制器中我经常声明如下内容 function myController someDirectives var ctrl this My code
  • 如果第一个域有文件夹路径,如何将一个域 301 重定向到另一个域

    我想要从 www olddomain com 进行 301 重定向到 newdomain com 的根目录 但无论旧域上的文件夹路径是什么 我都希望它能够正常工作 例如 以下内容都应重定向到 newdomain com 的根目录 www o
  • iPhone。粒子系统性能

    我试着把雨和雪画成粒子系统 using 核心显卡 在模拟器中渲染进行得很好 但是当我在真实设备上运行我的应用程序时渲染速度变慢 所以 请告诉我增加方法iPhone 上的粒子系统绘图性能 也许我应该使用OpenGL为此或核心动画 OpenGL
  • 如何将复选框绑定到值的倒数?

    我有一个情况 当我需要将一个复选框和另一个 DOM 元素的可见性绑定到我的 viewModel 的布尔属性的逆时
  • 使用 Google Cloud Functions 实现微服务的 API 网关

    Inputs 例如 我们有一些服务 账户服务 产品服务 支付服务 每项服务都是一个单独的 Google Cloud Function 每个服务都有自己的 HTTP API 例如 账户服务有 https REGION FUNCTIONS PR
  • 完全丢失:Django Rest Framework 中的序列化器和更新的多对多

    我已经研究这个问题几个小时了 但没有找到解决方案 我只是不明白 我有一个有很多孩子的父母 我创建了一个视图 允许我获取父级的所有子级 现在我想结束该列表 并使用新的子列表对父列表进行 PATCH 我明白我需要写一个自定义update方法 但
  • 如何在Python中按扩展名删除文件?

    我只是想制作一个通过 zip 扩展名删除项目的脚本 import sys import os from os import listdir test os listdir Users ben downloads for item in te
  • 检测跨域弹窗何时关闭

    我有一个 JavaScript 应用程序 位于domainA com 上 为了验证用户身份并设置 cookie 它会在 domainB com 上打开一个弹出窗口 这类似于 Twitter 的 anywhere 如何检测domainB co
  • 如何在 R 中绘制更平滑的曲线

    Using R 我画了一个阴影图 如果您看到曲线 它们并不平滑 如何让它们变得光滑 即使是 Excel 也能绘制出更加平滑的曲线 设备功能 Windows 7 屏幕分辨率 1366 x 768 最大 这是情节 以下代码用于绘制绘图 plot
  • 删除前 n 个单词并计数

    我有一个数据框对于文本列 我需要忽略或消除前 2 个单词并计算该列中的字符串数量 b lt data frame text c hello sunitha what can I do for you hi john what can I d
  • 从 std::heap 中间删除一个元素

    我使用优先级队列作为调度程序 但有一个额外的要求 我需要能够取消预定的项目 这相当于从优先级队列中间删除一个项目 我不能使用std priority queue因为对除顶部之外的任何元素的访问都受到保护 我正在尝试使用algorithm的堆
  • python 单元测试中的 Neo4j 临时数据库

    我正在尝试为将与 Neo4j 图形数据库交互的 python 项目创建单元测试 目前 我正在实现嵌入式图形数据库 但如果我选择将其部署到 Web 应用程序 我可能会迁移到 REST 接口 我已经安装了嵌入式 neo4j v1 9rc2pro
  • BeautifulSoup:AttributeError:“NavigableString”对象没有属性“name”

    你知道为什么 BeautifulSoup 教程中的第一个例子吗http www crummy com software BeautifulSoup documentation html QuickStart http www crummy
  • 将 WatiN 连接到 Firefox

    使用 WatiN 我面临一些问题 FireFox FF new FireFox http www google com FireFox 总是在此时崩溃 VS 报告 无法从传输中读取数据 连接 现有连接是 被远程主机强行关闭 知道为什么会发生
  • 获取剑道网格中的点击事件

    我正在尝试获取 Kendo Grid 的单击事件 以便我可以将内容绑定到 Shift 和 Ctrl 单击 我无法使用 Kendo 提供的固有多选功能 因为它不支持拖放 当我在 dataBound 事件之后创建函数时 我的函数会在单击时被调用
  • 当绘制的数据发生更改时,在 R 中更新绘图,无需重新创建小部件

    每次 R 在闪亮 或仅在 R 中创建一个绘图对象时 该小部件都会完全重新创建 对于小数据集 这不是问题 但我正在处理包含数千个散点的绘图 这使得在我的闪亮应用程序中重新创建绘图需要 10 20 秒 我正在寻找一种通过 JavaScript