即使在修改数据后,如何使用plotly为选定点返回相同的event_data信息

2023-11-24

我正在尝试做一些看似简单的事情:当用户单击数据点或使用套索选择选择多个点时,我想以不同的颜色绘制这些点。为了做到这一点,我查看选择了哪些点,并添加一个col变量到数据框,我告诉 ggplot 根据该列为点着色。

它确实适用于第一次选择。但只要已经选择了点,选择下一组点就不起作用。我添加了调试语句来查看从plotly返回的数据,并且它似乎返回不同的数据pointNumber and curveNumber经过初步选择后。我找不到任何有关这些变量如何工作的文档,并且我不确定如何解决此问题。

这是一个显示问题的 GIF

这是重现的代码:

library(plotly)
library(shiny)

ui <- fluidPage(
  plotlyOutput("plot")
)

server <- function(input, output, session) {
  output$plot <- renderPlotly({
    click_data <- event_data("plotly_click", source = "select")
    select_data <- event_data("plotly_selected", source = "select")
    data <- mtcars
    data$col <- "black"
    if (!is.null(select_data)) {
      cat(str(select_data))
      idx <- select_data$pointNumber + 1
      data[idx, "col"] <- "blue"
    }
    if (!is.null(click_data)) {
      cat(str(click_data))
      idx <- click_data$pointNumber + 1
      data[idx, "col"] <- "red"
    }
    p <- ggplot(data, aes(mpg, wt, col = I(col))) + geom_point()
    ggplotly(p, source = "select")
  })
}

shinyApp(ui, server)

我还被告知,也许我需要做的是创建自己的行标识符并将其传递给key审美的。我不确定这意味着什么我尝试定义key <- row.names(data)然后通过key=key到 ggplot 的 aes(),但这似乎没有改变任何东西。


卡森·西弗特回答了我的问题要点

答案如下:

我知道这似乎违反直觉,但 pointNumber 不是可靠的行标识符。使用这样的关键变量:

library(plotly)
library(shiny)

mtcars$key <- row.names(mtcars)
mtcars$col <- "black"

ui <- fluidPage(
  plotlyOutput("plot")
)

server <- function(input, output, session) {
  output$plot <- renderPlotly({
    click_data <- event_data("plotly_click")
    select_data <- event_data("plotly_selected")
    if (!is.null(select_data)) {
      mtcars[mtcars$key %in% select_data$key, "col"] <- "blue"
    }
    if (!is.null(click_data)) {
      mtcars[mtcars$key %in% click_data$key, "col"] <- "red"
    }
    p <- ggplot(mtcars, aes(mpg, wt, col = I(col), key = key)) + 
      geom_point()
    ggplotly(p) %>% layout(dragmode = "lasso")
  })
}

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

即使在修改数据后,如何使用plotly为选定点返回相同的event_data信息 的相关文章

随机推荐

  • Python中如何进行封装?

    这有什么问题吗 从客观和功能的角度来看 import sys class EncapsulationClass object def init self self privates dict privates protected a sel
  • 需要一个公式:从 0001 年 1 月 1 日 12:00 AM 以来的秒数中提取年份

    输入 自 0001 年 1 月 1 日以来的秒数 输出 该时间段内的整年数 我开发了一种我认为不是最佳解决方案的算法 我认为应该有一个不涉及循环的解决方案 请参阅代码块 1 了解算法 该算法 A 确定天数 B 根据闰年从天总数中迭代减去 3
  • NHibernate - 执行 SQL 来填充 DTO

    我有一些报告实例 其中执行存储过程比复杂的 QueryOver 语句更容易 更简单 我有一个 DTO 而不是一个实体 它表示从查询返回的数据 并希望将查询结果填充到 DTO 中 我正在使用命名查询和 session GetNamedQuer
  • 在 iOS 中对包含字母数字单词的数组进行排序[重复]

    这个问题在这里已经有答案了 我有一个包含 10 个元素的数组 称为 products 默认情况下已排序 这是现在的当前日志 for int i 0 i
  • 如何将包含撇号的语句插入Sqlite数据库

    在我的 iPhone 应用程序中 我使用 Sqlite 数据库 我需要将文本存储在数据库中 文本包含撇号 例如 Insert into tbl insert values It is Steve s Shirt 如何将此类语句存储在Sqli
  • F# 中的策略模式

    在 C 中 我有以下代码 public class SomeKindaWorker public double Work Strategy strat int i 4 some code var s strat Step1 i some m
  • 如何让自定义元素在 Firefox 中工作?

    我有这个基本的自定义元素示例 它可以在 Chrome 中运行 但不能在 Firefox 中运行 有没有办法让它在 Firefox 中工作 没有聚合物 但可能是某种填充 我还启用了dom webcomponents enabled标记没有任何
  • 如何在没有 USB 连接的情况下在手机睡眠模式下调试 Android 应用程序

    我想这很棘手 通过 USB 连接 用于调试 和拔出 USB 时 手机的行为有所不同 不同之处在于睡眠模式 使用 USB 连接的手机似乎更活跃且响应更快 而没有 则更少 例如 我有一个闹钟来唤醒手机并调节音量 连接时 在睡眠状态下工作正常 每
  • 懒惰的、广度优先的一元玫瑰树展开是否可能?

    Data Tree包括unfoldTreeM BF and unfoldForestM BF使用单子操作的结果来广度优先构造树的函数 树展开器可以使用森林展开器轻松编写 因此我将重点关注后者 unfoldForestM BF Monad m
  • 将纬度和经度转换为 esri arcGIS MapPoint

    我在将纬度和经度值转换为 android esri arcGIS 地图点时遇到问题 这是我从 GPS 坐标获取纬度和经度值的代码 LocationManager lm String towers double lat double long
  • 如何在jsdoc中描述“对象”参数?

    My function does X and Y params object parameters An object containing the parameters params function callback The callb
  • 加载 EntityFramework 4.3.1 时出错

    我用 C 创建了一个 MVC 应用程序 我在我的解决方案中创建了一个名为 PhoneDomain 的新项目 这样做的目的是将我的数据和领域层与实际问题分开 我右键单击该项目并转到 添加库包引用 然后尝试添加 EntityFramework
  • 如何在 Angular 2 中将字符串的特定部分加粗

    我有一个 HTML 代码如下 div class row div class col 12 style margin top 15px margin bottom 10px description translate div div 我在用
  • 通过 Spark groupBy dataframe 查找时间戳的最小值

    当我尝试将数据框分组到列上时 尝试找到每个分组的最小值groupbyDatafram min timestampCol 看来我无法在非数字列上执行此操作 那么如何正确过滤 groupby 上的最小 最早 日期呢 我正在从 postgresq
  • LINQ Sum 溢出异常?

    我已经为 EventLogEntry 实现了自定义 IEqualityComparer public class EventLogEntryListComparison IEqualityComparer
  • 如何对列表列表中的每个列表进行排序

    如何对以下嵌套列表中的列表进行排序 功能sort仅适用于普通列表 lst 123 3 12 89 14 2 901 4 67 预期结果 3 12 123 2 14 89 4 67 901 这是一种非常简单的方法 无需任何包 列表理解 lst
  • 视口大小改变时自动刷新页面

    我正在为我的网站使用响应式和自适应媒体查询来适应智能手机 现在的问题是我的最大宽度移动查询以 480px 结束 这是大多数手机旋转的显示宽度 当手机侧放时 现在一些手机 比如 HTCdesire 的最大屏幕宽度为 533px 现在当用户第一
  • Gulp 错误:生成 EACCES

    gulpfile js use strict var gulp require gulp gulp paths src src dist dist tmp tmp e2e e2e require require dir gulp gulp
  • 类型错误:无法读取未定义的属性“tigerStart”

    我是打字稿和角度 js 的新手 我尝试将另一个组件代码包含到我的代码中 这是我的代码中的baby js代码 但我收到错误 类型错误 无法读取未定义的属性 tigerStart 你们能告诉我如何解决它吗 在下面提供我的代码 TypeError
  • 即使在修改数据后,如何使用plotly为选定点返回相同的event_data信息

    我正在尝试做一些看似简单的事情 当用户单击数据点或使用套索选择选择多个点时 我想以不同的颜色绘制这些点 为了做到这一点 我查看选择了哪些点 并添加一个col变量到数据框 我告诉 ggplot 根据该列为点着色 它确实适用于第一次选择 但只要