Можно ли выбрать местоположение графика с помощью входной переменной? - PullRequest
1 голос
/ 24 мая 2019

Я настраиваю веб-приложение с блестящей приборной панелью для отображения данных из Google Analytics. Я хотел бы позволить пользователю выбирать, на каком графике он хочет отобразить данные, с помощью формы (plot1, plot2, plot3). Я хочу получить местоположение (input $ select_plot) и сгенерировать данные в выбранном графике, когда я нажимаю кнопку действия (что-то вроде output $ (input $ select_plot)):

Моя форма

Я пробовал разные способы (с реактивным), но все еще не работает, я не знаю, возможно ли это вообще

Вот мой код:

ui.R

tabItem("perso2", h1("Sub-item 2 tab content"),            
              hr(),
              fluidRow(
              column(3, wellPanel(
              selectInput("select2", label = h3("Metrics"),
                          multiple = TRUE,
                          choices = list("Users" = "users",
                                    "New users" = "newUsers",
                                    "Sessions" = "sessions",
                                    "Session Duration" = "sessionDuration",
                                    "Average session" = "avgSessionDuration"), 
                                    selected = 1),

                  selectInput("select_plot", label = h3("Select box"), 
                              choices = list("Choice 1" = "plot1", "Choice 2" = "plot2", "Choice 3" = "plot3")),

                  actionButton("do", "Click Me")

                ))),
              fluidRow(
              column(width = 4, plotOutput("plot1")),
              column(width = 4, plotOutput("plot2")),
              column(width = 4, plotOutput("plot3"))
              )
            )

и сервер.R

  dataaa <- eventReactive(input$do, {
    token <- auth$token()

    time <- rollupGA(GAProfileTable = getprofile(),
                     start_date = "2019-04-04",
                     end_date = "2019-04-11",
                     metrics = paste("ga:",input$select2, collapse=NULL, sep=""),
                     ga = token)
    time[,c('date',input$select2)]
  })

  selected_plot <- reactive({ input <- select_plot })

    output$selected_plot <- renderPlot({
    validate(
      need(getprofile(), "Authentificate to see"))
      plot(dataaa()) 
  })

Если пользователь выберет «Вариант 3», я рассчитываю сгенерировать график в plotOutput («plot3»), Есть ли решение или другой способ сделать это?

Thks

1 Ответ

1 голос
/ 24 мая 2019

Вот пример приложения, которое позволяет вам выбрать график.

Трюки:

  • данные не меняются, поэтому дублировать данные не нужно
  • графики зависят исключительно от счетчика (аналогично тому, как actionButton ведет себя в реактивности), поэтому всякий раз, когда этот счетчик изменяется, он обновляет свой график
library(shiny)

myplot <- function(s) {
  w <- strwidth(s)
  plot(0, type = 'n', xlim = 0:1, ylim = 0:1, axes = FALSE, ann = FALSE)
  box()
  text(0.5, 0.5, labels = s, cex = 0.5/strwidth(s))
}

ui <- fluidPage(
  fluidRow(
    textInput("words", label = NULL, placeholder = "Something to say?"),
    selectInput("which", "Which plot?", choices = c("plot1", "plot2"), selected = "plot1"),
    actionButton("go", "Say it!")
  ),
  fluidRow(
    column(width = 4, plotOutput("plot1")),
    column(width = 4, plotOutput("plot2"))
  )
)

server <- function(input, output, session) {

  whichplot <- reactiveValues(plot1 = 0, plot2 = 0)

  observeEvent(input$go, {
    req(input$which)
    whichplot[[ input$which ]] <- whichplot[[ input$which ]] + 1
  })

  output$plot1 <- renderPlot({
    req(whichplot$plot1, isolate(input$words))
    message("plotting 1")
    myplot(isolate(input$words))
  })

  output$plot2 <- renderPlot({
    req(whichplot$plot2, isolate(input$words))
    message("plotting 2")
    myplot(isolate(input$words))
  })

}

shinyApp(ui, server)
...