R Shiny: Могу ли я использовать Shinyjs() без actionButton?

Я надеюсь автоматически скрыть сюжет с помощью Shinyjs() без использования actionButton. Это возможно?

Это мой код в ui.R:

tabPanel(title = "Plot", useShinyjs(), 
         sidebarPanel(width = 4,                                                                           
                      h2("Plotting"),                                                                           
                      radioButtons(inputId = "type",                                                                                                       
                                   label = "Type of Plot:",                                                                                                      
                                   choices = c("Scatter Plot", 
                                               "Pie Chart", "Bar Chart"),                                                                                                   
                                   selected = "Scatter Plot"),                                                                                  
                   ),

         mainPanel(width = 8,
                   br(), br(),                                                                  
                   div(id='showplot', plotlyOutput(outputId = "plot")),
                   div(id='showplot2', plotOutput(outputId = "plot2")),
                   br(),                                                     
                   h5(textOutput("description"))
                   )
                  )

Это мой код в server.R:

output$plot <- renderPlotly({
  if (input$type == "Scatter Plot") {
  show("showplot") 
} else {
  hide("showplot")
}
  ggplotly({
    p <- ggplot(data = variable_source(), aes_string(x = input$x, y = input$y)) +
    geom_point(size = input$size, col = input$color) +
    labs(x = x(),
         y = y(),
         color = toTitleCase(str_replace_all(input$z, "_", " ")),
         title = toTitleCase(input$plot_title)

  if (input$fit == TRUE) {
    p <- p + geom_smooth(method = "lm")
  }
  p
  })
})

output$plot2 <- renderPlot({
if (input$type == "Pie Chart") {
    show("showplot2") 
  } else {
    hide("showplot2")
  }
  ggplot(shortlistpied(), aes_string(x = factor(1),  y = "Percentage", fill = input$y)) + 
    geom_bar(stat = "identity", width = 1) +
    geom_text(aes(x = factor(1), y = label_pos, label = perc_text), size = 4) + 
    scale_fill_distiller(palette = "Oranges") +
    coord_polar("y") + 
    facet_wrap( ~get(input$x)) + 
    theme_void()
})

РЕДАКТИРОВАТЬ: это то, что я вижу сначала, когда запускаю приложение: исходный график рассеяния , и это все хорошо. Но когда я нажимаю на круговую диаграмму, я вижу следующее: круговая диаграмма исчезает. Диаграммы исчезают, когда должны быть здесь, например: оригинал круговой диаграммы. Кроме того, когда я возвращаюсь, чтобы щелкнуть точечную диаграмму, она тоже исчезает вот так: точечная диаграмма исчезает . Можно ли это решить?

По сути, я пытаюсь сделать так, чтобы на главной панели отображалась диаграмма рассеяния, когда пользователь нажимает на диаграмму рассеяния, и круговая диаграмма, когда пользователь нажимает на круговую диаграмму. Я пытался использовать NULL, но со ссылкой на этот пост - R Shiny : Как не отображать график, когда NULL создает неудобное пустое пространство, и я надеюсь, что смогу этого избежать.

Большое спасибо заранее!


person DGOH    schedule 06.12.2018    source источник
comment
это не воспроизводимый пример. Но я предполагаю, что если вы оберните свои графики в div с уникальным идентификатором, вы можете скрыть этот div, не создавая пробелов.   -  person Wilmar van Ommeren    schedule 06.12.2018
comment
привет, большое спасибо за ваш ответ! Мне жаль, что это не воспроизводится. Я действительно новичок в r shining, и мне было интересно, что вы имели в виду, заключая мои графики в div. Я не слишком уверен, как это сделать. Еще раз спасибо.   -  person DGOH    schedule 06.12.2018
comment
Большое спасибо за ваш ответ еще раз! Извините, я все еще немного запутался. Поэтому я оборачиваю свои графики в div (как указано выше) в своем пользовательском интерфейсе. Затем на моем сервере я просто делаю observe({ toggleClass(id = "hidethisid", class = "plot", condition = input$type == "Scatter Plot") }) вне моих функций output$plot/output$plot2?   -  person DGOH    schedule 06.12.2018
comment
Это может сработать. Трудно помочь, если вы не опубликуете полностью рабочий пример.   -  person Wilmar van Ommeren    schedule 06.12.2018
comment
Поэтому я не совсем уверен, как сделать его воспроизводимым, поскольку мне придется изменить набор данных, но я прикрепил серию скриншотов выше, которые, я надеюсь, помогут? Я попытался включить ваш код выше, но он все еще не решает проблему, и я не совсем уверен, почему. Любая помощь приветствуется!   -  person DGOH    schedule 06.12.2018
comment
Вы имеете в виду, что это весь код, который у вас есть на вашем сервере? Чем есть намного больше проблем   -  person Wilmar van Ommeren    schedule 06.12.2018
comment
Нет-нет, есть намного больше, но я подумал, что это соответствующие части. Я думаю, по сути, я пытаюсь спросить, есть ли способ, которым я могу 1) скрыть вывод графика на главной панели, когда я нажимаю на другой ввод на боковой панели; 2) вместо этого замените это пустое место другим выводом графика; и 3) чтобы он мог вернуться к оригиналу, когда я снова нажму на него. Спасибо!   -  person DGOH    schedule 06.12.2018