Shiny Plotly反应数据图

时间:2016-09-05 17:02:34

标签: r plot shiny plotly

我已经从教程和示例中整理了这个Shiny应用程序,而且我已经陷入困境。我的目标是使图表具有反应性,以便数据指向< uval $ df'绘制,意味着将从图表中删除选定的点,并且它不能被选择两次。我该怎么做呢? (我感觉这是我缺乏基本理解的东西)

谢谢!

library(shiny)
library(plotly)
library(dplyr)

ui <- fluidPage(
  fluidRow(
    column(12,plotlyOutput("plot"),
           verbatimTextOutput("txtout1"),
           verbatimTextOutput("txtout2"),
           verbatimTextOutput("txtout3"))
  )
)

server <- function(input, output, session) {
x<-c(1,2,34,2,1,23,24)   
y<-c(10,20,30,40,50,60,70)
df<-data.frame(x,y)
vector.is.empty <- function(x) return(length(x) ==0 )

K <-reactive({
  event_data("plotly_selected",source = "B")
})

M<-reactive({
  K()[,c("x","y")]
})

values <- reactiveValues()
values$df <- data.frame(x = numeric(0), y = numeric(0))
newEntry <- observeEvent(K(),priority = 1,{
    new0 <- isolate(M())
    isolate(values$df <- rbind(values$df, new0))
})

uval <- reactiveValues()
uval$df <- df
newEntry1 <- observeEvent({values$df},priority = 2,{
  new1 <- isolate(data.frame(values$df))
  isolate(uval$df <- setdiff(df,new1))
})

output$plot <- renderPlotly({
  plot_ly(x = df$x, y = df$y, mode = "markers",source="B") %>%
    layout(dragmode =  "select", title = "Original Plot", font=list(size=10))
})

output$txtout1 <- renderPrint({
  if(vector.is.empty(K())) "Click and drag across points" else M()
})

output$txtout2 <- renderPrint({
  uval$df
})

output$txtout3 <- renderPrint({
  values$df
})

}

shinyApp(ui, server, options = list(display.mode = "showcase"))

1 个答案:

答案 0 :(得分:1)

简单,就像我想的那样。

plot_ly(uval$df, x = x, y = y, mode = "markers",source="B")