2015-12-07 18 views
3

我正在嘗試構建一個閃亮的應用程序,該應用程序允許用戶點擊一個圖表上的多個位置,然後單擊一個按鈕將這些座標添加到圖表。問題在於我需要將這些座標作爲向量傳遞給外部C程序,所以我需要使這個列表(向量)可以在閃亮的應用程序中從外部獲得。這是我無法做到的。使用點擊數據更新一個圖形

我已經在下面包含了一個玩具示例(呈現很好),並且非常抱歉地嘗試創建這樣的列表。我想用這個玩具的例子是產生一個x,y座標列表,然後從這個列表中獲取x和y座標,並將它們添加到從mtcars中獲取的向量中,點擊「接受新的值「按鈕,例如。

有什麼建議嗎? 謝謝,馬特

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

你正在尋找一個列表,一種適於反應式編程: 所以?reactiveValues是你的朋友: 下面的代碼,您可以

  • 保存點擊點在「被動列表」中

  • 通過單擊動作按鈕繪製(尚未修改的點)按鈕

驗證碼:

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)