我正在尝试做一些看似简单的事情:当用户单击数据点或使用套索选择选择多个点时,我想用不同的颜色绘制这些点。为了做到这一点,我查看选择了哪些点,并向数据框添加一个col
变量,然后告诉 ggplot 根据该列对点进行着色。
它确实适用于第一个选择。但是,只要已经选择了点,选择下一组点就不起作用。pointNumber
我添加了调试语句以查看从 plotly 返回的数据,并且它似乎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(),但这似乎并没有改变任何东西。