【问题标题】:How to display many points from plotly_click in R Shiny?如何在 R Shiny 中显示来自 plotly_click 的许多点?
【发布时间】:2020-05-12 19:19:20
【问题描述】:

我在 R Shiny 中有一个情节。我希望能够单击许多点并将它们显示在表格中。该图运行良好,我可以获得 1 个 plotly_click(通过 event_data())在表格中显示。如何增长许多 event_data 点的向量。这是一些示例代码。我试图将事件保存在 d_save 中。谢谢。

library(shiny)
library(plotly)

data1 <- data.frame(cbind(seq(1,1000,1),seq(1,1000,1)*5))
colnames(data1) <- c('index','data')
data_points <- data.frame(cbind(seq(1,1000,5),seq(1,1000,5)*5))
colnames(data_points) <- c('index','data')


ui <- fluidPage(
  plotlyOutput("plot1"),
  tableOutput("dataTable")
)

d_save <- vector()

server <- function(input, output, session) {

  # make plotly plot
  output$plot1 <- renderPlotly({
    p <- plot_ly(data1, x = data1$index, y = data1$data,mode = "lines")
    add_trace(p, x = data_points$index, y = data_points$data, mode = "markers")
  })

    # show table of stances 
    output$dataTable <- renderTable({
      d <- event_data("plotly_click")
      d_save <- c(d_save,d$pointNumber[2]+1)
      data.frame(d_save)
    })
}

shinyApp(ui, server)

【问题讨论】:

    标签: r shiny plotly


    【解决方案1】:

    这并没有什么严重的问题,奇怪的是它从未得到回答。这不是一个纯情节(不使用ggplot)的坏例子。

    我通过以下方式修复它:

    • d_save &lt;- c(...) 分配更改为d_save &lt;&lt;- c(...)(在此处使用reactiveValues 会更简洁)。
    • 将 plotly 调用更改为管道,这似乎允许保留某些设置(如 type=scatter 默认值) - 消除警告:

    未指定跟踪类型:根据提供的信息,“分散”跟踪 似乎合适。

    • 修复了 d_save 分配中的“逐一”索引错误。
    • 添加了 layout(...) 来为其命名(这对很多事情都很有用)。

    生成的代码:

    library(shiny)
    library(plotly)
    
    data1 <- data.frame(cbind(seq(1,1000,1),seq(1,1000,1)*5))
    colnames(data1) <- c('index','data')
    data_points <- data.frame(cbind(seq(1,1000,5),seq(1,1000,5)*5))
    colnames(data_points) <- c('index','data')
    
    ui <- fluidPage(
      plotlyOutput("plot1"),
      tableOutput("dataTable")
    )
    
    d_save <- vector()
    
    server <- function(input, output, session) {
    
      # make plotly plot
      output$plot1 <- renderPlotly({
        plot_ly(data1, x=data1$index, y=data1$data,mode = "lines") %>%
             add_trace(x = data_points$index, y=data_points$data, mode = "markers") %>%
             layout(title="Plotly_click Test")
      })
    
      # show table of point markers clicked on by number
      output$dataTable <- renderTable({
        d <- event_data("plotly_click")
        d_save <<- c(d_save,d$pointNumber[1]+1)
        data.frame(d_save)
      })
    }
    shinyApp(ui, server)
    

    图片:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多