代码之家  ›  专栏  ›  技术社区  ›  Prradep

将事件数据信息映射到有光泽反应图中的绘图信息

  •  1
  • Prradep  · 技术社区  · 7 年前

    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
    

    有没有办法将这些信息映射到原始数据集 mtcars ? 信息将如何在 curveNumber , pointNumber

    1 回复  |  直到 7 年前
        1
  •  1
  •   Patrik_P    7 年前

    这个 curveNumber colour = 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)
    

    或者,第二个选项,您需要提取 key 从…起 event_data

    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)
    
    推荐文章