【问题标题】:Slider with years for barplot带有年份的条形图滑块
【发布时间】:2020-11-14 13:16:12
【问题描述】:

我正在尝试在我的条形图页面中添加一个滑块,以使数据每年都具有交互性。

#library

library(dplyr)
library(shiny)
library(shinythemes)
library(ggplot2)

#Source
dataset <- read.csv("Wagegap.csv")

SFWage <- dataset %>% 
  group_by(gender,JobTitle, Year) %>%
  summarise(averageBasePay = mean(BasePay, na.rm=TRUE)) %>%
              select(gender, JobTitle, averageBasePay, Year)

clean <- SFWage %>% filter(gender != "")


#UI
ui <- fluidPage(
  
  theme = shinytheme("united"),
  
  navbarPage("San Fransisco Wages",

             tabPanel("Barplot",
                    
                      mainPanel(
                        plotOutput("barplot")
                        
                      )) ,
             tabPanel("Table", 
                      mainPanel(
                        dataTableOutput("table")
                      ))                     
  )
)                       
       
#server
server <- function(input, output){
  
  output$barplot <- renderPlot({
    
    ggplot(clean, aes(x = JobTitle, y = averageBasePay  ))+
    geom_bar(stat="Identity", width = 0.3, fill="orange")+
    labs(x= "Jobs", y = "Wage", title = "Wage per job")
   
})
  
  
  output$table <- renderDataTable({
    clean
    
  })
}
  
  #Run App
  shinyApp(ui = ui, server = server)

我还不完全明白如何输入这个输入。 我尝试将它滑入导航栏页面,但我无法弄清楚它是如何工作的。 我也尝试过让 year 反应但没有成功。

【问题讨论】:

    标签: r shiny slider bar-chart


    【解决方案1】:

    这不是必须被动反应的年份;这是整个数据框。因此,在您的 ui 中,您可以这样做:

    [...]
    tabPanel("Barplot",
                          
                          mainPanel(
                            sliderInput("year", label = "Which year should be displayed?", min = 1900, max = 2020, step = 5, value = 2000) # new
                            plotOutput("barplot")
                            
                          )) ,
    [...]
    

    我把它放在那里是为了方便;布局是你的。我试着做尽可能少的改变。

    然后服务器会:

    server <- function(input, output){
      
      # NEW ########################################
      clean <- reactive({
        SFWage <- dataset %>% 
          group_by(gender,JobTitle, Year) %>%
          summarise(averageBasePay = mean(as.numeric(BasePay), na.rm=TRUE)) %>% # Notice the as.numeric()
          select(gender, JobTitle, averageBasePay, Year)
        
        SFWage %>% filter(gender != "" & Year == input$year)
      })
      
      # OLD ########################################
      output$barplot <- renderPlot({
        
        ggplot(clean(), aes(x = JobTitle, y = averageBasePay  ))+ # Parenthesis
          geom_bar(stat="Identity", width = 0.3, fill="orange")+
          labs(x= "Jobs", y = "Wage", title = "Wage per job")
        
      })
      
      
      output$table <- renderDataTable({
        clean() # Parenthesis
        
      })
    }
    

    不要忘记添加括号,就像我在这里所做的那样。

    这应该可以,但我可能打错了一些东西或完全错了。由于我没有你的数据,我无法测试它。

    编辑:由于您的评论,我添加了as.numeric() 术语,如您在上面看到的。但是,如果您的数据不仅不是数字,而且还有,,您可以这样做:

    [...]
          summarise(averageBasePay = mean(as.numeric(gsub(",", ".", BasePay)), na.rm=TRUE)) %>% # Notice the as.numeric() and the gsub()
    [...]
    

    【讨论】:

    • 滑块有效,但我无法测试它是否对数据做出反应,因为它不会计算基本工资的平均值。数据是字符。我应该将 as.numeric(gsub(".", ",", BasePay)) 代码粘贴到哪里?
    • 我不明白你为什么要放“,”而不是“。”在您的数据中。 as.numeric() 适用于 "10.12"(例如),而不是 "10,12"
    • 在另一个帖子中,有人发布了“可能是因为他们有”。当您的语言环境使用“,”时,十进制 seps。试试 `as.numeric(gsub(".", ",", BasePay))''
    • 强制引入的 NA 是我将 as.numeric(dataset$basepay) 放在 SFWage 上方时得到的结果
    • 好的,我的gsub() 反过来:你用as.numeric(gsub(".", ",", BasePay))代替as.numeric(gsub(",", ".", BasePay))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多