闪亮的r:通过点击图表清除数据表中的选定行

时间:2015-12-08 16:26:23

标签: javascript r datatable ggplot2 shiny

使用ShinyR和数据表,我们可以创建交互式图。当用户在数据表中选择一行时,它在图表中显示具有特定颜色和形状的行。当我们取消选择行时,点增益正常条件。 从(Shiny apps)修改的示例。

此外,我们可以在图表上识别特定点(我们感兴趣)(使用nearPoints

我希望用户能够通过单击图表上的特定点来取消选择该行。一旦用户点击图表上的点,它将获得正常的外观。

然而,我找不到使它工作的功能。 新DT库中有proxyselectRows函数( DT -package)(但对于Mac,它不可用)。 Example

另一种选择是在javascript中编写和选择callback代码,但我的知识在该领域是有限的。

感谢任何意见和建议。

UI

library(shiny)
library(DT)

fluidPage(
  title = 'Select Table Rows',
  fluidRow(
    column(6, DT::dataTableOutput('x1')),
    column(6, plotOutput('x2', height = 500,click = "plot_click"),
           verbatimTextOutput("info"))
  )
)

服务器

shinyServer(function(input, output, session) {  
  output$x1 = DT::renderDataTable(cars, server = FALSE)
  # highlight selected rows in the scatterplot
  output$x2 = renderPlot({
    s = input$x1_rows_selected
    par(mar = c(4, 4, 1, .1))
    plot(cars)
    if (length(s)) points(cars[s, , drop = FALSE], pch = 19, cex = 2)
  }) 
  output$info <- renderPrint({
    paste("Selected point row.name - ", row.names(nearPoints(cars, input$plot_click, xvar = "speed", yvar = "dist")), sep="")
  }) 
})

1 个答案:

答案 0 :(得分:3)

使用DT的新版本,它与proxy

完美配合
proxy = dataTableProxy('x1')
observeEvent(input$plot_click, {
  removeRow <- as.numeric(row.names(nearPoints(cars, input$plot_click, xvar = "speed", yvar = "dist")))
  selectRows(proxy, input$x1_rows_selected[!input$x1_rows_selected %in% removeRow])
})