首页 文章

将事件数据信息映射到Shiny无效图中的绘图信息

提问于
浏览
0

如何从even_data信息中检索用于绘图的原始数据?

library(plotly)
library(shiny)

ui <- fluidPage(
  plotlyOutput("plot"),
  verbatimTextOutput("click")
)

server <- function(input, output, session) {

  output$plot <- renderPlotly({
    key <- row.names(mtcars)
    p <- ggplot(mtcars, aes(x = mpg, y = wt, colour = factor(vs), key = key)) + 
        geom_point()
    ggplotly(p) %>% layout(dragmode = "select")

  })


  output$click <- renderPrint({
    d <- event_data("plotly_click")
    if (is.null(d)) "Click events appear here (double-click to clear)" else d
  })


}

shinyApp(ui, server)

单击某个点时,示例输出将类似于

curveNumber pointNumber    x    y       key
1           1           3 24.4 3.19 Merc 240D

有没有办法将这些信息映射到原始数据集 mtcarscurveNumberpointNumber 中的信息将如何有用以及这些字段的含义是什么?

1 回答

  • 1

    curveNumbercolour = factor(vs) 变量, pointNumber 是组内的行号1(vs的0或1) .

    所以使用这两个你可以做到以下几点:

    library(plotly)
    library(shiny)
    library(dplyr)
    ui <- fluidPage(
      plotlyOutput("plot"),
      verbatimTextOutput("click")
    )
    server <- function(input, output, session) {
      output$plot <- renderPlotly({
        key <- row.names(mtcars)
        p <- ggplot(mtcars, aes(x = mpg, y = wt, colour = factor(vs), key = key)) + 
          geom_point()
        ggplotly(p) %>% layout(dragmode = "select")
      })
      output$click <- renderPrint({
        d <- event_data("plotly_click")
        if (is.null(d)) "Click events appear here (double-click to clear)" else mtcars %>% tibble::rownames_to_column() %>% filter(vs==d$curveNumber) %>% filter(row_number()==d$pointNumber+1)
    
      })
    }
    shinyApp(ui, server)
    

    或者,第二个选项,您需要从 event_data 和子集mtcars中提取 key ,如下所示:

    output$click <- renderPrint({
        d <- event_data("plotly_click")
        if (is.null(d)) "Click events appear here (double-click to clear)" 
        else mtcars[rownames(mtcars) == d$key,]
      })
    

    完整的应用程序:

    library(plotly)
    library(shiny)
    ui <- fluidPage(
      plotlyOutput("plot"),
      verbatimTextOutput("click")
    )
    server <- function(input, output, session) {
      output$plot <- renderPlotly({
        key <- row.names(mtcars)
        p <- ggplot(mtcars, aes(x = mpg, y = wt, colour = factor(vs), key = key)) + 
          geom_point()
        ggplotly(p) %>% layout(dragmode = "select")
      })
      output$click <- renderPrint({
        d <- event_data("plotly_click")
        if (is.null(d)) "Click events appear here (double-click to clear)" else mtcars[rownames(mtcars) == d$key,]
      })
    }
    shinyApp(ui, server)
    

相关问题