перерисовка графиков динамически в r - PullRequest
1 голос
/ 19 июня 2020

Я пошел в совершенно другом направлении в этом проекте - проблема, с которой я столкнулся, в конце, мне нужно очистить график, когда выбрана другая переменная. График остается прежним. Спасибо.

Я даже не уверен, как это будет сформулировано в документах - переписывание графиков, c построение графиков ??? Я видел display.removePlot (display.activePlotIndex ()), но не уверен в этом - что мне искать, чтобы понять это?

library(shiny)
library(DT)
library(ggplot2)
oboler_data <- read_csv(file = "C:/Users/12083/Desktop/ref.csv")
rdate <- as.Date(oboler_data$DATE,"%m/%d/%y")

ui <- fluidPage(sidebarLayout(
    sidebarPanel(
        selectInput("dataset", "choose a dataset", c("oboler_data")),
        selectInput("column", "Type of Transaction", "placeholder1"),
        selectInput("level", "select level", "placeholder2")
    ),
    mainPanel(tableOutput("table"), plotOutput("Histo"))

))

server <- function(input, output, session){
    dataset <- reactive({
        get(input$dataset)
    })

    observe({
        updateSelectInput(session, "column", choices = names(dataset()))
    })

    observeEvent(input$column, {
        column_levels <- as.character(sort(unique(
            dataset()[[input$column]]
        )))
        updateSelectInput(session, "level", choices = column_levels)
    })

    output$table <- renderTable({
        subset(dataset(), dataset()[[input$column]] == input$level)
    })
    DF <- data.frame(Name = LETTERS[1:10], Value = rnorm(20), Value2 = runif(20))
    output$TableOut <- renderDataTable({
        DF
    })
    output$Histo <- renderPlot({
        ggplot(DF, aes(Value)) + geom_histogram(binwidth = 0.1,
                                                fill = "blue", color = "white")
    })




}



shinyApp(ui, server)

1 Ответ

0 голосов
/ 19 июня 2020

Я думаю, вам следует использовать req, поскольку он исключает (и очищает!) Рендеринг графика, если условия не выполняются.

library(shiny)
shinyApp(
  ui = fluidPage(
    checkboxInput("cb", "Plot?"),
    sliderInput("cyls", "Cylinders", min = 1, max = 8, value = 4, step = 1),
    plotOutput("plt")
  ),
  server = function(input, output, session) {
    output$plt <- renderPlot({
      req(input$cb, input$cyls)
      ggplot(mtcars[mtcars$cyl >= input$cyls,,drop = FALSE],
             aes(disp, mpg, color = factor(cyl))) +
        geom_point()
    })
  }
)

ggplot2 conditional plot with req function

Три скриншота выше расположены в последовательности: начинаются с «Сюжет?» не выбран, график не отображается; выберите его, появится сюжет; отмените выбор, существующий график исчезнет.

Способ адаптации этого к вам - заменить req(input$cb) чем-то, что соответствует вашему условию «очистить график». (Я также включил сюда input$cyls, просто чтобы не дать более крупным и сложным приложениям достичь блока сюжета до того, как все входные данные стабилизируются. Возможно, не требуется в большинстве приложений, но это защитный ход, который не имеет большого значения, если он избыточен, но много выгоды, когда это необходимо.)

Небольшая модификация темы, «сообщающая пользователю, почему сюжет исчез». Замените req на validate и хотя бы один need:

      # req(input$cb, input$cyls)
      validate(
        need(input$cb, "You deselected \"Plot!\"")
      )

tell the user why

...