Shiny app graphing NZ CO2 (eqv) emissions from 1990 to 2010 https://shiny.petras.space/Emissions/
rstats
statistics
rshiny
climate-change
new-zealand

app.R 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. library(shiny)
  2. library(ggplot2)
  3. library(scales)
  4. library(tidyverse)
  5. library(readxl)
  6. Emissions.Sector <- read_excel("Emissions1990-2010.xlsx",
  7. sheet = "Sector")
  8. Emissions.Fuel <- read_excel("Emissions1990-2010.xlsx",
  9. sheet = "Fuel")
  10. Sector.Tot <- filter(Emissions.Sector, Source == "Total")
  11. sectors.a <- unique(Emissions.Sector$Sector)
  12. sectors <- unique(Emissions.Sector$Sector)[-1]
  13. # gather(comf, key="Year", value="Co2eqv", as.character(1990:2010))
  14. Sector.Fuels <- function(sector) {
  15. sf <- filter(Emissions.Sector, Sector == sector)
  16. if (nrow(sf) > 1) {
  17. sf <- filter(sf, !grepl("Total", Source))
  18. }
  19. return(sf)
  20. }
  21. # UI ----
  22. ui <- navbarPage("NZ Emissions", collapsible = TRUE,
  23. # Sector tab ----
  24. tabPanel("Sector",
  25. h3("Emissions by sector"),
  26. plotOutput("secPlot"),
  27. fluidRow(
  28. column(5, offset=1,
  29. h4("Options"),
  30. sliderInput("secyears", "Date range",
  31. min=1990, max=2010, value=c(1990, 2010),
  32. sep="", step=1),
  33. selectInput("secscale", "Scale",
  34. choices=c("y", "sqrt(y)", "log10(y)"), selected="y"),
  35. checkboxInput("seclegend", "Show legend", value=TRUE),
  36. checkboxInput("secminc", "Set minimum", value=FALSE),
  37. conditionalPanel("input.secminc",
  38. numericInput("secmin", label=NULL, value=NA)),
  39. checkboxInput("secmaxc", "Set maximum", value=FALSE),
  40. conditionalPanel("input.secmaxc",
  41. numericInput("secmax", label=NULL, value=NA))
  42. ),
  43. column(5, offset=1,
  44. h4("Sectors"),
  45. checkboxGroupInput("secSectors", NULL,
  46. choices=sectors.a, selected = sectors.a)
  47. )
  48. )
  49. ),
  50. tabPanel("By fuel")
  51. )
  52. server <- function(input, output) {
  53. SecOverall <- reactive({
  54. st <- gather(Sector.Tot, key="Year",
  55. value="Co2eqv", as.character(1990:2010)) %>%
  56. mutate(Year = as.integer(Year),
  57. Sector = factor(Sector, levels=unique(Sector))) %>%
  58. # Logic for filtering out years, sectors here
  59. filter(Year %in% input$secyears[1]:input$secyears[2],
  60. Sector %in% input$secSectors) %>%
  61. mutate(Year = as.Date(paste0(Year, "-01-01")))
  62. return(st)
  63. })
  64. output$secPlot <- renderPlot({
  65. sov <- SecOverall()
  66. ggplot(sov, aes(x=Year,
  67. y=Co2eqv, linetype=Sector, color=Sector)) -> s.p
  68. s.p + geom_line(size=1.5, na.rm=TRUE) -> s.p
  69. s.p + guides(linetype=guide_legend(keywidth = 5)) -> s.p
  70. s.p + theme_linedraw() -> s.p
  71. s.p + theme(legend.position = "right",
  72. legend.title = element_blank()) -> s.p
  73. s.p + ylab("CO₂ equivalent (kt)") -> s.p
  74. if (!input$seclegend) {
  75. s.p + theme(legend.position="none") -> s.p
  76. }
  77. mmx <- c(ifelse(input$secminc, input$secmin, NA),
  78. ifelse(input$secmaxc, input$secmax, NA))
  79. if (input$secscale == "sqrt(y)") {
  80. s.p + scale_y_sqrt(breaks=pretty_breaks(n=5), limits=mmx) -> s.p
  81. } else if (input$secscale == "log10(y)") {
  82. s.p + scale_y_log10(breaks=pretty_breaks(n=5), limits=mmx) -> s.p
  83. } else {
  84. s.p + scale_y_continuous(breaks=pretty_breaks(n=5), limits=mmx) -> s.p
  85. }
  86. return(s.p)
  87. })
  88. }
  89. shinyApp(ui = ui, server = server)