2015-08-27 2 views
3

Возможно ли создать интерактивный блестящий граф, который, когда вы наведете над графиком, появится следующий граф? Прямо сейчас у меня два графика в одной панели.Интерактивный зависание Блестящие графики

Это ближайший логик example я могу найти, хотя последующий (увеличенный) участок уже есть (в то время как я только хочу, чтобы последующий график появляться при наведении указателя мыши на основной графике):

ответ

5

Вы можете используйте опцию hover в plotOutput из ui.R и свяжите ее с условной панелью, чтобы отображать только второй график, когда пользователь зависает над первым.

Я изменил пример вас в курсе этих изменений:

library(ggplot2) 
library(Cairo) # For nicer ggplot2 output when deployed on Linux 
library(shiny) 

ui <- fluidPage(
     fluidRow(
       column(width = 8, class = "well", 
         h4("Left plot controls right plot"), 
         fluidRow(
           column(width = 6, 
             plotOutput("plot2", height = 300, 
               brush = brushOpts(
                 id = "plot2_brush", 
                 resetOnNew = TRUE 
               ), 
               #add the hover options 
               hover = hoverOpts(
                 id = "plot2_hover", 
                 nullOutside = TRUE 
               ) 
            ) 
           ), 
           column(width = 6, 
             #the second plot will be hidden if the user's mouse is not on the first one 
             conditionalPanel(
               condition = "input.plot2_hover != null", 
               plotOutput("plot3", height = 300) 
            ) 
           ) 
         ) 
       ) 

     ) 
) 

server <- function(input, output) { 
     ranges2 <- reactiveValues(x = NULL, y = NULL) 

     output$plot2 <- renderPlot({ 
       ggplot(mtcars, aes(wt, mpg)) + 
         geom_point() 
     }) 

     output$plot3 <- renderPlot({ 
       ggplot(mtcars, aes(wt, mpg)) + 
         geom_point() + 
         coord_cartesian(xlim = ranges2$x, ylim = ranges2$y) 
     }) 

     # When a double-click happens, check if there's a brush on the plot. 
     # If so, zoom to the brush bounds; if not, reset the zoom. 
     observe({ 
       brush <- input$plot2_brush 
       print(input$plot2_hover) 
       if (!is.null(brush)) { 
         ranges2$x <- c(brush$xmin, brush$xmax) 
         ranges2$y <- c(brush$ymin, brush$ymax) 

       } else { 
         ranges2$x <- NULL 
         ranges2$y <- NULL 
       } 
     }) 

} 

shinyApp(ui, server) 
Смежные вопросы