将鼠标悬停在 Shiny 中的元素上时如何更改绘图?

2024-04-22

我正在寻找一种解决方案,当用户将鼠标悬停在同一面板中的超链接上时,可以更改 Shiny 应用程序中的绘图。这是一个简单的例子:

library(shiny)

words <- sort(sapply(1:50, USE.NAMES = F, FUN = function (x) paste(sample(letters, 15), collapse = "")), decreasing = T)

dat <- data.frame(words, f = sort(rgamma(50, shape = 5, scale = 1)))

ui <- pageWithSidebar(
  headerPanel("Playground"),
  sidebarPanel(),
  mainPanel(
    uiOutput("links"),
    plotOutput("out.plot")
  )
)

server <- function(input, output, session) {
  urls <- lapply(dat$words, FUN = function (x) {
    a(paste0(" ", x, " "),
      href = paste0("https://", x, ".de"),
      target = "_blank")
  })
  output$links <- renderUI({
    tagList(urls)
  })
  output$out.plot <- renderPlot({
    ggplot(dat, aes(x = words, y = f)) +
      geom_bar(stat = "identity") +
      theme(axis.text.x = element_text(angle = 90))
  })
}

shinyApp(ui, server)

在此示例中,每当我将鼠标悬停在图上方的超链接(示例中的超链接或无意义的超链接,但这不是问题)上时,我想突出显示 ggplot 的一个条(例如,更改其颜色)。正如您在示例中看到的,所有栏都与一个超链接“关联”。

该解决方案应该非常敏感(即快速)。也许,情节有帮助?我不太了解情节,无法说。

我没有任何 JavaScript 经验。我很想了解解决方案,如果涉及任何 JavaScript,所以请尝试广泛评论。多谢!

我附上了应用程序的屏幕截图,因此如果您不想,则不必运行示例代码。


The shinyjs https://deanattali.com/2015/04/23/shinyjs-r-package/包确实可以简化这类事情。我们可以使用onevent使用“mouseenter”作为参数来捕获这些事件的函数。为了让它工作,我们必须给元素一个 id,或者将它们包装在一个带有我们可以引用的 id 的 div 中。然后我们可以使用它们来更新reactiveVal保存当前悬停的元素,该元素又用于reactive这改变了我们的data.frame被绘制。我们可以重置reactiveVal还可以监听“mouseleave”事件。

我希望这有帮助!



library(shiny)
library(shinyjs)
library(dplyr)
library(ggplot2)

set.seed(1)
words <- sort(sapply(1:50, USE.NAMES = F, FUN = function (x) paste(sample(letters, 15), collapse = "")), decreasing = T)

dat <- data.frame(words, f = sort(rgamma(50, shape = 5, scale = 1)),stringsAsFactors = F)

ui <- pageWithSidebar(
  headerPanel("Playground"),
  sidebarPanel(),
  mainPanel(
    uiOutput("links"),
    plotOutput("out.plot"),
    useShinyjs()
  ))

server <- function(input, output, session) {
  urls <- lapply(dat$words, FUN = function (x) {
    div(id=x, a(paste0(" ", x, " "),
      href = paste0("https://", x, ".de"),
      target = "_blank"))
  })
  output$links <- renderUI({
    tagList(urls)
  })

  # Add a reactieVal that we can update once an object is hovered.
  hovered_element <- reactiveVal('')

  # Add onevent for each element in dat$words, to update reactiveVal.
  lapply(dat$words,function(x){
    onevent(event='mouseleave',id=x,hovered_element(''))
    onevent(event='mouseenter',id=x,hovered_element(x))
  })

  # Add a reactive for the dataset, which we debounce so it does not invalidate too often.
  my_data <- reactive({    
    dat$color <- ifelse(dat$words==hovered_element(),'hovered','')
    dat
  })
  my_data <- my_data %>% debounce(50) # tune for responsiveness

  # Plot
  output$out.plot <- renderPlot({
    ggplot(my_data(), aes(x = words, y = f,fill=color)) +
      geom_bar(stat = "identity") +
      theme(axis.text.x = element_text(angle = 90)) + theme(legend.position="none")
  })
}

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

将鼠标悬停在 Shiny 中的元素上时如何更改绘图? 的相关文章

随机推荐

  • 如何在 LaTeX 表中仅显示四舍五入到整数的系数?

    使用 R 在 LaTeX 中生成表格stargazer效果很好 但我不知道如何将我的数字格式化为整数 这个帖子 https stackoverflow com questions 39937400 decimal numbers in r
  • PHP GDAL/OGR 库的使用,哪种方法更干净?

    我将在新项目中使用 gdal ogr 我想要一个精简但功能齐全的应用程序 因此不会使用其他实现 例如地图服务器 因为它们具有我怀疑应用程序中是否需要的无关组件 即使在将来也是如此 根据记录 它是一个 GIS 但我在这里询问是因为 php 中
  • Jackson json反序列化,忽略json中的根元素

    如何忽略 json 中的父标签 这是我的 json String str parent a id 10 name Foo 这是要从 json 映射的类 public class RootWrapper private List
  • .NET“隔离存储”存储在哪里?

    物理文件在哪里 这取决于操作系统以及是否启用漫游用户配置文件 例如 在 XP 上 使用非漫游配置文件时 位置为
  • Asp.net:委托(“操作”)可以序列化为控制状态吗?

    我正在实现一个用户控件 该控件具有一个将 Action 委托作为参数的方法 尝试将委托存储在控制状态中会产生序列化错误 是否有可能将委托序列化为控制状态 BP 这并不容易 而且可能会引发潜在问题 理论上可以使用反射来确定委托正在调用对象的哪
  • 为什么我的 Scrapy 中的输入/输出处理器不工作?

    我正在努力追随本教程 http doc scrapy org en 1 1 intro tutorial html 我想要我的desc字段是标准化为单个空格且大写的单个字符串 dmoz spider py import scrapy fro
  • 通过 REST API 的 VSTS 工作项列表

    如何使用 REST API 从 VSTS 获取工作项列表 根据文档 https www visualstudio com docs integrate api wit work items the ids参数是可选的 但是当我省略它时 我得
  • Android半圆形进度条-绘制半圆

    我用这个创建了一个半圆形进度条devadvance circularSeekBar https github com devadvance circularseekbar当我从调色板中选择自定义视图时 它看起来像这样 在此我有两个带有权重的
  • 转换为“日期时间”类型时出现问题:“小时必须为 0..23”

    这些是我的 csv 文件中的一些示例行 10 10 1949 20 30 san marcos tx us cylinder 2700 45 minutes This event took place in early fall aroun
  • 在 C++ Win32 应用程序中,如何确定私有字节、工作集和虚拟大小[重复]

    这个问题在这里已经有答案了 我正在编写一些用于教育目的的代码 我希望能够从用 C 编写的 Windows 控制台程序中打印这些内存使用值 花了一些时间从这些链接中获取我想要的内容 但它就是这样 大部分困难是让它在 Mingw32 中工作 c
  • Solr 和方面搜索

    当您设置模式时 分面搜索是否内置 或者您是否必须做一些事情来设置它 它基本上可以在您设置为可排序的所有字段上开箱即用吗 那么您只需使用 fq 查询语法 它就会返回构面 xml 以及搜索结果 有没有一篇关于这方面的好文章对您第一次有帮助 是的
  • 了解共享指针的问题(生命周期,作为参数传递)

    我尝试从 boost asio 聊天示例开始并派生出一个自己的网络程序 不幸的是 我在理解到底发生了什么方面遇到了一些问题 我试图将我的程序减少到绝对最低限度 服务器类等待传入连接并创建会话对象来处理连接 这是服务器的代码 include
  • RxSwift:管理应用程序中的对象更新

    我非常关心如何管理对象属性的更改 假设我有一个 汽车 类 其中包含一些属性 例如 名称 日期 价格 等 在我的视图 A 中 我正在显示从 API 检索的所有汽车 在视图 B 和 C 中 我可以显示和编辑有关视图 A 中所选汽车的特定信息 假
  • Gridpane 中的 JavaFx 图像会大幅降低性能

    我想创建一个 GridPane 嵌套在 ScrollPane 中 在其中动态添加单元格到 GridPane 每个单元格都包含一个带有背景图像的 VBox 一些标签和一个复选框 问题是 GridPane 可以包含数百个 VBox 在我的例子中
  • 为什么 Google 测试工具使用“id”属性来生成微数据项的 URL?

    我正在使用一些微数据来描述一篇博客文章 我对 Schema org 的价值回报感到惊讶BlogPosting通过 Google 开发者测试工具 我本以为它是 itempropurl 不是网站 URL 和项目的合并id 我做错了什么 还是只是
  • jQuery,选择具有属性的最近兄弟(下一个或上一个)

    我有一个类似于下面标记的选择下拉列表
  • 如何使用java上传谷歌云存储中的文件

    我已经尝试使用java在Google云存储中上传文件很长时间了 通过浏览我找到了这段代码 但无法准确理解 任何人都可以定制这个以在 GCS 中上传文件吗 Given InputStream inputStream object data e
  • 更快的位图对比度算法

    我有一个带有轨迹栏滑块控件的工具 用于调整图像的亮度 对比度 伽玛值等 我试图在用户拖动滑块时实时更新我的 图像 亮度和伽玛算法的速度是可以接受的 大约170ms 但对比算法大约是380ms 基本上我的表单是一个带有滑块的工具窗口 每次更新
  • 循环遍历一组谷歌工作表值

    我有2组数据 一是坦克名称 Tank Name A1 A2 B1 B2 接下来是开 关数据 ON OFF 0 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 现在我要查看的结果是 当ON OFF为1时
  • 将鼠标悬停在 Shiny 中的元素上时如何更改绘图?

    我正在寻找一种解决方案 当用户将鼠标悬停在同一面板中的超链接上时 可以更改 Shiny 应用程序中的绘图 这是一个简单的例子 library shiny words lt sort sapply 1 50 USE NAMES F FUN f