Как изменить произвольную входную переменную в блестящем

Я пытаюсь реализовать функцию увеличения на графике (обычный график ggplot2 и базовый R), используемый в модуле блестящего рендеринга. Вот код.

ui <- basicPage(
  plotOutput("plot1",
             brush = "plot_brush"
  )
)

server <- function(input, output) {
  output$plot1 <- renderPlot({

    plot(mtcars$wt, mtcars$mpg, xlim = c(input$plot_brush$xmin, input$plot_brush$xmax), ylim=c(input$plot_brush$ymin, input$plot_brush$ymax))

  })
}

shinyApp(ui, server)

Здесь я хочу установить ввод: - input$plot_brush до NULL после применения масштабирования. Я знаю, что это потребует изменения в блоке renderPlot кода, но помимо этого, как я могу установить input$plot_brush в NULL [что приведет к исчезновению выбора с графика]. Я знаю, что функции ввода обновления существуют для обновления пользовательского интерфейса [например, shiny::updateSelectInput() и т. д.], но здесь их нельзя использовать для этой цели. На данный момент только один способ решить эту проблему — иметь базовый график и масштабированный график, где масштабирование будет применяться после выбора области на базовом графике [как реализовано в https://gallery.shinyapps.io/105].-plot-interaction-zoom/.

Пожалуйста помоги мне с этим.


person Indranil Gayen    schedule 17.11.2015    source источник


Ответы (1)


Если я правильно понял, что вы правильно установили кисть на NULL, это просто убрать выделение синей кисти?

Если это так, вы можете сделать это следующим образом:

ui <- basicPage(
  plotOutput("plot1",
             brush = brushOpts("plot_brush",resetOnNew=T),
             dblclick = 'dblclick'
  )
)

#
# Zoom in on plot brush, restore zoom on dbl click
#
server <- function(input, output) {
  ranges <- reactiveValues(x=NULL, y=NULL)

  output$plot1 <- renderPlot({
    plot(mtcars$wt, mtcars$mpg, xlim = ranges$x, ylim=ranges$y)
  })
  # Set limits for zoom
  observe({
    brush <- input$plot_brush
    if (!is.null(brush)) { ranges$x <- c(brush$xmin, brush$xmax); ranges$y <- c(brush$ymin, brush$ymax); } 
  })
  # Zoom out on doubleclick
  observeEvent(input$dblclick,{
    ranges$x <- NULL; ranges$y <- NULL; 
  })
}
#
# Zoom in on dbl click, restore zoom on dbl click
#
server2 <- function(input, output) {
  ranges <- reactiveValues(x=NULL, y=NULL)

  output$plot1 <- renderPlot({
    plot(mtcars$wt, mtcars$mpg, xlim = ranges$x, ylim=ranges$y)
  })

  # Set ranges for plot zoom
  observeEvent(input$dblclick,{
    brush <- input$plot_brush
    if (!is.null(brush)) { ranges$x <- c(brush$xmin, brush$xmax); ranges$y <- c(brush$ymin, brush$ymax); } 
    else{ ranges$x <- NULL; ranges$y <- NULL; }
  })
}
shinyApp(ui, server)

Здесь я использую сброс на новом, чтобы удалить выделение кисти после масштабирования.

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

Server2 показано, как вы можете увеличить масштаб, дважды щелкнув по зачищенной области, чтобы увеличить масштаб, двойной щелчок без кисти уменьшает масштаб.

Надеюсь это поможет!

person RmIu    schedule 18.11.2015