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

标签 r shiny plotly ggplotly

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

它确实适用于第一选择。但是,只要有已选择的点,就无法选择下一组点。我添加了调试语句,以查看从plotly返回的数据,并且在初始选择之后,它似乎返回了不同的pointNumbercurveNumber。我找不到有关这些变量如何工作的任何文档,也不确定如何解决此问题。

这是一个GIF showing the issue

这里是要重现的代码:

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(),但这似乎没有任何改变。

最佳答案

卡森·西维特(Carson Sievert)回答了我的问题on a gist

答案如下:

我知道这似乎违反直觉,但是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)

关于r - 即使修改数据后,如何使用plotly为选定的点返回相同的event_data信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46304639/

相关文章:

r - 时间顺序(小时)

r - 如何延长facet gridded ggplot中的特定刻度线?

R Shiny Plotly 3D : Change the title of x , y , z 轴到实际变量名称并添加图例标题

shiny - R Shiny - R Shiny 服务器开源的 WebSEAL 身份验证

r - 模块中使用的 observeEvent Shiny 函数不起作用

r - 根据分类变量过滤 plotly 折线图

python - 删除 Jupyter Notebook 中的 plotly 子图中的 "This is the format of your plot grid:"

r - 在 R 中正确使用 go to 算法

rbind 基于列名并排除不匹配

当在跟踪中设置悬停信息时,Python Plotly xaxis 悬停文本消失