2016-07-27 1 views
1

У меня есть сюжетный участок в R Shiny. Я хочу, чтобы можно было щелкнуть много точек и отобразить их в таблице. Сюжет отлично работает, и я могу получить 1 plotly_click (через event_data()) для показа в таблице. Как можно вырастить вектор многих точек event_data. Вот пример кода. Я пытался сохранить событие в d_save. Благодарю.Как отобразить много точек из plotly_click в R Shiny?

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) 

ответ

2

В этом нет ничего плохого, и было странно, что на него никогда не получал ответа. Это не плохой пример чистого заговора (без использования ggplot).

Я установил его:

  • изменения d_save <- c(...) назначение на d_save <<- 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) 

Изображение:

enter image description here

+0

Любая обратная связь для меня? –

+0

Долгосрочно, но спасибо. – sajawa

+0

Я ценю это, никогда не поздно. Но могу ли я попросить вас принять ответ? Нажмите на маленькую галочку под верхним/нижним углом. Это тоже дает вам очки. –

Смежные вопросы