Интерактивные парящие блестящие графики

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

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


person Una    schedule 27.08.2015    source источник


Ответы (1)


Вы можете использовать параметр 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)
person NicE    schedule 27.08.2015