首页 > 解决方案 > ActionButton 在闪亮的 r 中添加/删除错误栏?

问题描述

我有一个 R Shiny 脚本,我想使用actionButton. 这是我到目前为止开发的数据和代码,但我正在努力使用带有 geom_errorbar 的 linkung actionButton

library(shiny)
library(ggplot2)
library(dplyr)
ui <- fluidPage(theme = shinytheme("darkly"),
                titlePanel("Stream Metabolism (open-channel, single-station)"),
                sidebarLayout(
                  sidebarPanel(
                    # Select type of trend to plot
                    selectInput(inputId = "Name", label = strong("Site Name"),
                                choices = unique(stack_data1$Name),
                                selected = "Waimea Stream at Mandeville"),
                  
                 # Select date range to be plotted
                    dateRangeInput("date", strong("Date range"), start = "2019-01-15", end = "2019-01-28",
                                   min = "2007-01-01", max = "2050-07-31"),
                    
                    # Select whether to overlay smooth trend line
                    checkboxInput(inputId = "smoother", label = strong("Overlay smooth trend line"), value = FALSE),
                    
                    # Display only if the smoother is checked
                 actionButton("add_btn", "Add error bars"),
                 actionButton("rm_btn", "Remove error bars"),
                 textOutput("counter")
                 
                  ),
                  
                  # Output: Description, lineplot, and reference
                  mainPanel(h3("Gross primary productivity (GPP)"),plotOutput(outputId = "lineplot1", height = "300px"),
                            h3("Ecosystem respiration (ER)"),
                            plotOutput(outputId = "lineplot2", height = "300px"),
                  )
                  
                  
                )
)

server <- function(input, output) {
  
  # Subset data
  selected_trends <- reactive({
    stack_data1 %>% filter(Name==input$Name)})
  
  
  # Create scatterplot object the plotOutput function is expecting
  output$lineplot1 <- renderPlot({
    ggplot(selected_trends(),aes(x=selected_trends()$date,y=selected_trends()$GPP.daily)) + 
      geom_line(stat="identity") + geom_errorbar(aes(ymin=GPP.daily-GPP.se, ymax=GPP.daily+GPP.se))
  })
  output$lineplot2 <- renderPlot({
    ggplot(selected_trends(),aes(x=selected_trends()$date,y=selected_trends()$ER.daily)) + 
      geom_line(stat="identity") + geom_errorbar(aes(ymin=ER.daily-ER.se, ymax=ER.daily+ER.se))
  }) 
}

shinyApp(ui = ui, server = server)

数据:

stack_data1  <- structure(list(Name = c("Waimea", "Waimea", "Waimea", "Waimea", 
"Waimea", "Waimea", "Mandiville", "Mandiville", "Mandiville", 
"Mandiville", "Mandiville", "Mandiville"), GPP.daily = c(2.117490461, 
2.691075696, 1.84678193, 2.198962707, 1.112202786, 2.022502917, 
2.449018167, 2.751946861, 1.170689454, 2.346309621, 2.727397795, 
2.680414728), GPP.se = c(0.1, 0.9, 0.5, 0.2, 0.3, 0.1, 0.9, 0.5, 
0.2, 0.3, 0.2, 0.1), ER.daily = c(-4.641115676, -5.928219632, 
-4.229082781, -4.313901881, -2.319110803, -5.025002375, -5.656338405, 
-5.686842614, -2.43665092, -4.87119492, -5.669055542, -6.893142768
), ER.se = c(1, 2, 1.2, 1.4, 0.8, 0.6, 0.9, 1, 0.2, 0.7, 1.5, 
1.3), date = structure(c(1547463600, 1547550000, 1547636400, 
1547722800, 1547809200, 1547895600, 1547463600, 1547550000, 1547636400, 
1547722800, 1547809200, 1547895600), class = c("POSIXct", "POSIXt"
), tzone = "")), row.names = c(NA, 12L), class = "data.frame")

任何人都可以帮忙吗?

标签: rshiny

解决方案


您可以使用radioButton看起来更适合您需求的 a :

library(shiny)
library(ggplot2)
library(dplyr)
stack_data1  <- structure(list(Name = c("Waimea", "Waimea", "Waimea", "Waimea", 
                                        "Waimea", "Waimea", "Mandiville", "Mandiville", "Mandiville", 
                                        "Mandiville", "Mandiville", "Mandiville"), GPP.daily = c(2.117490461, 
                                                                                                 2.691075696, 1.84678193, 2.198962707, 1.112202786, 2.022502917, 
                                                                                                 2.449018167, 2.751946861, 1.170689454, 2.346309621, 2.727397795, 
                                                                                                 2.680414728), GPP.se = c(0.1, 0.9, 0.5, 0.2, 0.3, 0.1, 0.9, 0.5, 
                                                                                                                          0.2, 0.3, 0.2, 0.1), ER.daily = c(-4.641115676, -5.928219632, 
                                                                                                                                                            -4.229082781, -4.313901881, -2.319110803, -5.025002375, -5.656338405, 
                                                                                                                                                            -5.686842614, -2.43665092, -4.87119492, -5.669055542, -6.893142768
                                                                                                                          ), ER.se = c(1, 2, 1.2, 1.4, 0.8, 0.6, 0.9, 1, 0.2, 0.7, 1.5, 
                                                                                                                                       1.3), date = structure(c(1547463600, 1547550000, 1547636400, 
                                                                                                                                                                1547722800, 1547809200, 1547895600, 1547463600, 1547550000, 1547636400, 
                                                                                                                                                                1547722800, 1547809200, 1547895600), class = c("POSIXct", "POSIXt"
                                                                                                                                                                ), tzone = "")), row.names = c(NA, 12L), class = "data.frame")
ui <- fluidPage(
  titlePanel("Stream Metabolism (open-channel, single-station)"),
  sidebarLayout(
    sidebarPanel(
      # Select type of trend to plot
      selectInput(inputId = "Name", label = strong("Site Name"),
                  choices = unique(stack_data1$Name),
                  selected = "Waimea Stream at Mandeville"),
      
      # Select date range to be plotted
      dateRangeInput("date", strong("Date range"), start = "2019-01-15", end = "2019-01-28",
                     min = "2007-01-01", max = "2050-07-31"),
      
      # Select whether to overlay smooth trend line
      checkboxInput(inputId = "smoother", label = strong("Overlay smooth trend line"), value = FALSE),
      
      # Display only if the smoother is checked
      radioButtons("err_bar", "Error bar",
                   c("With error bar" = "yes",
                     "No error bar" = "no")),
      textOutput("counter")
      
    ),
    
    # Output: Description, lineplot, and reference
    mainPanel(h3("Gross primary productivity (GPP)"),plotOutput(outputId = "lineplot1", height = "300px"),
              h3("Ecosystem respiration (ER)"),
              plotOutput(outputId = "lineplot2", height = "300px"),
    )
    
    
  )
)

server <- function(input, output) {
  
  # Subset data
  selected_trends <- reactive({
    stack_data1 %>% filter(Name==input$Name)})
  
  
  # Create scatterplot object the plotOutput function is expecting
  output$lineplot1 <- renderPlot({
    p <- ggplot(selected_trends(),aes(x=selected_trends()$date,y=selected_trends()$GPP.daily)) + 
      geom_line(stat="identity")
    if (input$err_bar=="yes") { p <- p+ geom_errorbar(aes(ymin=GPP.daily-GPP.se, ymax=GPP.daily+GPP.se))}
    p
  })
  output$lineplot2 <- renderPlot({
    p <- ggplot(selected_trends(),aes(x=selected_trends()$date,y=selected_trends()$ER.daily)) +
      geom_line(stat="identity") 
    if (input$err_bar=="yes") { p <- p + geom_errorbar(aes(ymin=ER.daily-ER.se, ymax=ER.daily+ER.se))}
    p
  }) 
}

shinyApp(ui = ui, server = server)

在此处输入图像描述


推荐阅读