使用点击数据更新图表

时间:2015-12-07 19:13:53

标签: r shiny

我正在尝试构建一个闪亮的应用程序,允许用户在绘图上的多个位置单击,然后单击按钮将这些坐标添加到绘图中。问题是我需要将这些坐标作为向量传递给外部C程序,因此我需要在闪亮的应用程序内部使这个列表(向量)可用。这是我无法做到的。

我在下面添加了一个玩具示例(呈现罚款),并且相当遗憾地尝试创建这样的列表。我希望这个玩具示例是生成一个x,y坐标列表,然后从该列表中取出x和y坐标,并将它们添加到从mtcars中取出的向量,在单击&#34时生成更新的图表;接受新的价值观"按钮,例如。

有什么建议吗? 谢谢,马特

library(shiny)
listo <- numeric()

ui <- basicPage(
  plotOutput("plot1", click = "plot_click"),
  verbatimTextOutput("info")
)

server <- function(input, output) {
  listo2 <-numeric() #create list
  obs <- observe({listo2 = append(listo2, input$plot_clickx)}) #adding clicks to list

    output$plot1 <- renderPlot({
    plot(mtcars$wt, mtcars$mpg)
  })

  output$info <- renderText({
    paste0("x=", input$plot_click$x, "\ny=", input$plot_click$y)
  })

  }

shinyApp(ui, server)

1 个答案:

答案 0 :(得分:2)

您正在寻找适合反应式编程的列表: 所以?reactiveValues是你的朋友: 您可以使用以下代码

  • 将点击点保存在“反应列表”

  • 点击actionButton

  • 绘制(尚未修改的)点数

守则:

library(shiny)

ui <- basicPage(
  plotOutput("plot1", click = "plot_click"),
  verbatimTextOutput("info"),
  actionButton("updateplot", "Update Plot:")
)

server <- function(input, output) {
  val <- reactiveValues(clickx = NULL, clicky = NULL)

  observe({
      input$plot_click
      isolate({
        val$clickx = c(val$clickx, input$plot_click$x)
        val$clicky = c(val$clicky, input$plot_click$y)     
      })
  }) #adding clicks to list

  output$plot1 <- renderPlot({
    plot(mtcars$wt, mtcars$mpg)
    input$updateplot
    isolate({
      points(val$clickx, val$clicky)
    })
  })

  output$info <- renderText({
    paste0("x = ", val$clickx, ", y = ",val$clicky, "\n")
  })

}

shinyApp(ui, server)