与Rshiny中的复选框进行交互以重叠地块

时间:2018-07-18 21:48:19

标签: r shiny

我在尝试绘制两个重叠的图并在我的Rshiny应用中显示它们时添加了复选框。我正在使用以下代码:

library(shiny)
library(shinyjs) 


mpgData <- mtcars

ui <- fluidPage(

  # Application title

  titlePanel("Test"),


  # Sidebar with checkboxes to select plot

  sidebarLayout(



    sidebarPanel(


      helpText("Select type of plot:"),

      checkboxGroupInput("checkPlot", 

                         label = ("Plots"), 

                         choices=c("Baseline","Scenario A"),

                         selected = c("Baseline","Scenario A")

      )

  ),

  mainPanel(
     textOutput("overview"),

      plotOutput("plot")
  )

  )

)

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


  #get Check group input (type of plot)

  checkedVal <- reactive({

    as.vector(input$checkPlot)


  }) 

  #plot
  output$plot <- renderPlot({

    if(("Baseline" %in% checkedVal()) & ("Scenario A" %in% checkedVal()))

       # first plot
       plot(mpgData$mpg, mpgData$cyl, type='l',col="steelblue",ylim=range(c(mpgData$cyl,mpgData$disp)))

       # second plot
       par(new = TRUE)
       plot(mpgData$mpg, mpgData$disp, type = "l",col="red", ylim=range(c(mpgData$cyl,mpgData$disp)), axes = FALSE, xlab = "", ylab = "")


    if ("Baseline" %in% checkedVal())

   plot(mpgData$mpg, mpgData$cyl, type='l',col = "steelblue")

    if ("Scenario A" %in% checkedVal())


      plot(mpgData$mpg, mpgData$disp, type='l',col = "red")

  })


}


shinyApp(ui, server)

当我只想显示一个图形时,我的复选框似乎工作正常,但是,当我想同时显示两个坐标轴时肯定存在问题。我看到的大多数示例太复杂了,以至于我无法理解和分解,因此我很累无法从以前的R知识中推断出来,但显然我已经离开了。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果要在现有图形上添加基线,则可以使用以下的lines函数。尽管如果对于您的特定数据集,基线与原始绘图相比确实可以忽略不计,则您需要使用除“ base”以外的其他软件包,例如“ ggplot”。

library(shiny)
library(shinyjs) 


mpgData <- mtcars

ui <- fluidPage(

  # Application title

  titlePanel("Test"),


  # Sidebar with checkboxes to select plot

  sidebarLayout(



    sidebarPanel(


      helpText("Select type of plot:"),

      checkboxGroupInput("checkPlot", 

                         label = ("Plots"), 

                         choices=c("Baseline","Scenario A"),

                         selected = c("Baseline","Scenario A")

      )

    ),

    mainPanel(
      textOutput("overview"),

      plotOutput("plot")
    )

  )

)

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


  #get Check group input (type of plot)

  checkedVal <- reactive({
    as.vector(input$checkPlot)
  }) 

  #plot


  # first plot
  output$plot <- renderPlot({

    if(("Baseline" %in% checkedVal()) & ("Scenario A" %in% checkedVal()))
    {   plot(mpgData$mpg, mpgData$cyl, type='l',col="steelblue",ylim=range(c(mpgData$cyl,mpgData$disp)))
      lines(mpgData$mpg, mpgData$disp, type = "l",col="red")
    }
    else if("Baseline" %in% checkedVal())
    {   
      plot(mpgData$mpg, mpgData$cyl, type='l',col = "steelblue")
    }
    else if("Scenario A" %in% checkedVal())
    {
      plot(mpgData$mpg, mpgData$disp, type='l',col = "red")
    }
  })




}


shinyApp(ui, server)

请告诉我这是否适合您。