Выберите вход с помощью Ggplot в блестящей панели инструментов не работает - PullRequest
0 голосов
/ 10 февраля 2019

Привет! Я использую Ggplot для своей блестящей приборной панели.Я хочу построить Quarter Vs Freq и Quarter Vs FreqbyPercent при выборе «A» и Quarter Vs TRinM и Quarter Vs TRinM

, и я использую Ggplot в качестве функции.Но когда я выбираю «A», там нет графика, а для «B» я получаю график.

Я пытался получить вывод, используя Ggplot отдельно для всех опций.Но результат тот же.

library(shinydashboard)
library(shiny)
library(shinyWidgets)
library(ggplot2)
## test data
Quarter <- c("Fy17Q1","Fy17Q1","Fy17Q1","Fy17Q2","Fy17Q2","Fy17Q2","Fy17Q3",
             "Fy17Q3","Fy17Q3","Fy17Q4","Fy17Q4","Fy17Q4","Fy18Q1","Fy18Q1",
             "Fy18Q1","Fy18Q2","Fy18Q2","Fy18Q2") 
RiskTierDesc <- c("Above Normal","High","Normal","Above Normal","High","Normal",
                  "Above Normal","High","Normal","Above Normal","High","Normal",
                  "Above Normal","High","Normal","Above Normal","High","Normal")
Freq <- c(502,62,1452,549,88,1582,617,80,1578,530,68,1455,536,61,1551,600,52,2038) 
FreqbyPercent <- c(25,3,72,25,4,71,27,4,69,26,3,71,25,3,72,22,2,76)
QuarterInNum<- c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6) 
TotalNRinM <- c(33.044,0,56.459,18.089,0.234,39.774,99.451,20.608,86.166,257.532,
                3.93,336.079,493.464,7.952,298.565,661.728,189.184,1172.245) 
TotalNRinMPercent <- c(37,0,63,31,0,68,48,10,42,43,1,56,62,1,37,33,9,58) 
File2<- data.frame(Quarter,RiskTierDesc,Freq,FreqbyPercent,QuarterInNum,TotalNRinM,
                   TotalNRinMPercent) 
File2$RiskTierDesc = factor(File2$RiskTierDesc, levels=c("High", "Above Normal", "Normal"))

ui <- dashboardPage(
  dashboardHeader(title = "Basic Dashboard"),

  dashboardSidebar(
                   sidebarMenu( selectInput("app", 
                                         "Select App:", 
                                         choices = c("","A","B"), 
                                         selected = "A", 
                                         multiple = FALSE)),
                             sliderTextInput("Quarter","Select Quarter:",
                                              choices =  unique(File2$Quarter),
                                              selected =  unique(File2$Quarter)[c(2, 5)])),

  dashboardBody(
    fluidRow(
      box(solidHeader = TRUE 
          ,collapsible = TRUE,align="center",offset = 2,title = "RiskTier Vs Quater",status = "warning", plotOutput("k", height = "300px"),width = 6)
      ,


      box(solidHeader = TRUE 
          ,collapsible = TRUE,align="center",offset = 4,title = "RiskTier Vs Quater(%)",status = "warning", plotOutput("l", height = "300px"),width = 6)



      )))



#==========================================SERVER=======================================================#

server <- function(input, output) {

  dataInput <- reactive({

    qfrom <- File2$QuarterInNum[match(input$Quarter[1], File2$Quarter)]
    qto <- File2$QuarterInNum[match(input$Quarter[2], File2$Quarter)]
    test <- File2[File2$QuarterInNum %in% seq(from=qfrom,to=qto),]
    #print(test)
    test
  })

  X<-reactive({input$app})

  Test1 <- function(df,y){

    arg <- match.call()

    p <- ggplot(df(), 
                aes(x=Quarter, y= eval(arg$y) , group= RiskTierDesc , colour= RiskTierDesc )) + 
      geom_line(aes(size= RiskTierDesc)) +
      geom_point() + ylim(0,15000) +
      scale_color_manual(values=c("red","orange","green")) +
      scale_size_manual(values=c(1,1,1)) +
      labs( x = "Quarter", y = input$yaxis) +
      geom_text(aes(label = eval(arg$y)), position = position_dodge(0),vjust = -1) +
      theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

    p

  }

  Test2 <- function(df,y){

    arg <- match.call()

    p <- ggplot(df(), 
                aes(x=Quarter, y= eval(arg$y) , group= RiskTierDesc , colour= RiskTierDesc )) + 
      geom_line(aes(size= RiskTierDesc)) +
      geom_point() + ylim(0,100) +
      scale_color_manual(values=c("red","orange","green")) +
      scale_size_manual(values=c(1,1,1)) +
      labs( x = "Quarter", y = input$yaxis) +
      geom_text(aes(label = eval(arg$y)), position = position_dodge(0),vjust = -1) +
      theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

    p
  }

  output$k<- renderPlot({
    if(input$app == "A"){plot(Test1(dataInput,Freq))}})

  output$l<- renderPlot({
    if(input$app == "A"){plot(Test2(dataInput,FreqbyPercent))}})


  output$k<- renderPlot({
    if(input$app == "B"){plot(Test1(dataInput,TotalNRinM))}})

  output$l<- renderPlot({
    if(input$app == "B"){plot(Test2(dataInput,TotalNRinMPercent))}})

}

shinyApp(ui, server)  

Пожалуйста, дайте мне знать, как получить сюжет для «А».Или там, где мне не хватает или мой подход неверен.

1 Ответ

0 голосов
/ 10 февраля 2019

Проблема с вашим кодом здесь:

 output$k<- renderPlot({
    if(input$app == "A"){plot(Test1(dataInput,Freq))}})

  output$l<- renderPlot({
    if(input$app == "A"){plot(Test2(dataInput,FreqbyPercent))}})



  output$k<- renderPlot({
    if(input$app == "B"){plot(Test1(dataInput,TotalNRinM))}})

  output$l<- renderPlot({
    if(input$app == "B"){plot(Test2(dataInput,TotalNRinMPercent))}})

Когда input$app == "A", оба графика отрисовываются, но тогда R будет выполняться также

output$k<- renderPlot({
        if(input$app == "B"){plot(Test1(dataInput,TotalNRinM))}})

output$l<- renderPlot({
        if(input$app == "B"){plot(Test2(dataInput,TotalNRinMPercent))}})

И потому что input$app == "B" равно FALSE, пустой график заменяет сгенерированные A.

Это мое предложение:

 output$k<- renderPlot({
    if(input$app == "A"){plot(Test1(dataInput,Freq))}
    if(input$app == "B"){plot(Test1(dataInput,TotalNRinM))}

    })

  output$l<- renderPlot({
    if(input$app == "A"){plot(Test2(dataInput,FreqbyPercent))}
    if(input$app == "B"){plot(Test2(dataInput,TotalNRinMPercent))}
    })

Конечно, я буду использовать if else,но это зависит от вас!

Лучший

...