library(dplyr)
library(magrittr)
library(ggplot2)
library(tidyr)
# Functions ---------------------------------------------------------------
# display & save stacked bar plot
plot <- function(df, ptitle) {
p <- ggplot(df, aes(x=yr, y=nameplate)) +
ggtitle(ptitle) +
theme(axis.text.x = element_text(angle = 45, hjust=1)) +
ylab("MW") +
scale_y_continuous(labels = scales::scientific)
# geom_bar()
if (grepl("fuel", ptitle)) {
p <- p +
geom_bar(aes(fill=fuel), stat="identity")
} else if (grepl("overnight", ptitle)) {
p <- p +
geom_bar(aes(fill=overnight), stat="identity")
}
# save
# fn <- paste0("figs/", ptitle, ".png")
# ggsave(filename=fn, plot=p, device="png", width=11, height=8, units="in")
return(p)
}
# aggregate by fuel/overnight, then plot
plot.agg <- function(df, ptitle, group) {
df.grp <- df %>%
group_by_at(vars(yr, matches(group))) %>%
summarise(nameplate=sum(nameplate)) %>%
ungroup()
df.grp$yr <- factor(df.grp$yr, levels=seq(from=1990, to=2016, by=1))
if (group=="fuel") {
df.grp <- df.grp %>%
group_by(yr, fuel) %>%
complete(fuel, yr, fill=list(nameplate=0))
} else if (group=="overnight") {
df.grp <- df.grp %>%
group_by(yr, overnight) %>%
complete(overnight, yr, fill=list(nameplate=0))
} else {
stop("Group not recognized!")
}
ptitle <- paste0(ptitle, " by ", group)
p <- plot(df.grp, ptitle)
return(p)
}
# multiplot w/ one legend function
source("figs/sharedlegend.R")
# 1 2
# 3 4
# multiplot w/ multiple legends
source("figs/multiplot.R")
# 1 3
# 2 4
# Original Dataset --------------------------------------------------------
data(capacity)
# full fleet
orig <- capacity %>%
dplyr::rename(fuel = fuel.general,
overnight = overnightcategory) %>%
mutate(overnight = gsub("conventional ", "", overnight)) %>%
mutate(yr = as.factor(yr))
# aggregate over vintage for full fleet
orig.fleet <- orig %>%
group_by(yr, utilcode, plntcode, overnight, fuel) %>%
summarise(nameplate=sum(nameplate)) %>%
ungroup()
# filter for new additions only
orig.new <- orig %>%
filter(yr == vintage)
# get plots
orig.fuel <- plot.agg(orig.fleet, "ORIG Fleet", "fuel")
orig.new.fuel <- plot.agg(orig.new, "ORIG Additions", "fuel")
orig.oc <- plot.agg(orig.fleet, "ORIG Fleet", "overnight")
orig.new.oc <- plot.agg(orig.new, "ORIG Additions", "overnight")
# yr.utilcode.plntcode.oc.fg ----------------------------------------------
data(capacity, generation)
mer1 <- inner_join( capacity, generation,
by = c("yr", "utilcode", "plntcode", "overnightcategory", "fuel.general") ) %>%
rename(overnight = overnightcategory,
fuel = fuel.general)
# aggregate over vintage for full fleet
mer1.fleet <- mer1 %>%
group_by(yr, utilcode, plntcode, overnight, fuel) %>%
summarise(nameplate = sum(nameplate)) %>%
ungroup()
# filter for new additions only
mer1.new <- mer1 %>%
filter(yr == vintage)
# get plots
mer1.fuel <- plot.agg(mer1.fleet, "MER1 Fleet", "fuel")
mer1.new.fuel <- plot.agg(mer1.new, "MER1 Additions", "fuel")
mer1.oc <- plot.agg(mer1.fleet, "MER1 Fleet", "overnight")
mer1.new.oc <- plot.agg(mer1.new, "MER1 Additions", "overnight")
# yr.utilcode.plntcode.pm.f -----------------------------------------------
data(capacity.unmapped, generation.unmapped, mapping)
# merge
mer2 <- inner_join( capacity.unmapped, generation.unmapped, # join unmapped datasets
by = c("yr", "utilcode", "plntcode", "primemover", "fuel") ) %>%
left_join(mapping, by=c("primemover", "fuel")) %>% # map datasets to oc-fg
select(-primemover, -fuel) %>% # aggregate redundant mappings (pm, f) -> (oc, fg)
group_by(yr, utilcode, plntcode, vintage, overnightcategory, fuel.general) %>%
summarise(nameplate = sum(nameplate) ) %>%
ungroup() %>%
rename(overnight = overnightcategory, # rename for plotting functions
fuel = fuel.general)
# aggregate over vintage for full fleet
mer2.fleet <- mer2 %>%
group_by(yr, utilcode, plntcode, overnight, fuel) %>%
summarise(nameplate = sum(nameplate)) %>%
ungroup()
# filter for new additions only
mer2.new <- mer2 %>%
filter(yr == vintage)
mer2.fuel <- plot.agg(mer2.fleet, "MER2 Fleet", "fuel")
mer2.new.fuel <- plot.agg(mer2.new, "MER2 Additions", "fuel")
mer2.oc <- plot.agg(mer2.fleet, "MER2 Fleet", "overnight")
mer2.new.oc <- plot.agg(mer2.new, "MER2 Additions", "overnight")
# yr.plntcode.pm.f --------------------------------------------------------
data(capacity.unmapped, generation.unmapped, mapping)
# merge
mer3 <- inner_join( capacity.unmapped, generation.unmapped, # join unmapped datasets
by = c("yr", "plntcode", "primemover", "fuel") ) %>%
left_join(mapping, by=c("primemover", "fuel")) %>% # map datasets to oc-fg
select(-primemover, -fuel) %>% # aggregate redundant mappings (pm, f) -> (oc, fg)
group_by(yr, plntcode, vintage, overnightcategory, fuel.general) %>% # no longer grouping by utilcode b/c two versions (.x, .y)
summarise(nameplate = sum(nameplate) ) %>%
ungroup() %>%
rename(overnight = overnightcategory, # rename for plotting functions
fuel = fuel.general)
# aggregate over vintage for full fleet
mer3.fleet <- mer3 %>%
group_by(yr, plntcode, overnight, fuel) %>%
summarise(nameplate = sum(nameplate)) %>%
ungroup()
# filter for new additions only
mer3.new <- mer3 %>%
filter(yr == vintage)
mer3.fuel <- plot.agg(mer3.fleet, "MER3 Fleet", "fuel")
mer3.new.fuel <- plot.agg(mer3.new, "MER3 Additions", "fuel")
mer3.oc <- plot.agg(mer3.fleet, "MER3 Fleet", "overnight")
mer3.new.oc <- plot.agg(mer3.new, "MER3 Additions", "overnight")
# Wonjun's 'merged' Dataset ---------------------------------------------------------
data(mapping)
mer4 <- read.delim("C:/Users/guti220/Desktop/merged.tsv") %>%
left_join(mapping, by=c("primemover", "fuel")) %>% # (pm, f) -> (oc, fg)
select(-primemover, -fuel) %>%
dplyr::rename(fuel = fuel.general,
overnight = overnightcategory,
vintage = startyr) %>%
mutate(overnight = gsub("conventional ", "", overnight)) %>%
mutate(yr = as.factor(yr)) %>%
filter(!is.na(generation)) %>% # merged weird, includes NA generation
group_by(yr, utilcode, plntcode, overnight, fuel, vintage) %>%
summarise(nameplate = sum(nameplate)) %>%
ungroup()
# aggregate over vintage for full fleet
mer4.fleet <- mer4 %>%
group_by(yr, utilcode, plntcode, overnight, fuel) %>%
summarise(nameplate = sum(nameplate)) %>%
ungroup()
# filter for new additions only
mer4.new <- mer4 %>%
filter(yr == vintage)
# get plots
mer4.fuel <- plot.agg(mer4.fleet, "MER4 Fleet", "fuel")
mer4.new.fuel <- plot.agg(mer4.new, "MER4 Additions", "fuel")
mer4.oc <- plot.agg(mer4.fleet, "MER4 Fleet", "overnight")
mer4.new.oc <- plot.agg(mer4.new, "MER4 Additions", "overnight")
# figs/outfile.txt --------------------------------------------------------
sink("figs/outfile.txt") # log
cat("Mapped Capacity Dataset : orig.fleet \n")
cat("DF size (agg'd over vintage): ", dim(orig.fleet), " \n")
cat("Cols: ", names(orig), "\n")
cat("\n")
cat("Mapped Generation Dataset \n")
cat("DF size: ", dim(generation), "\n")
cat("Cols: ", names(generation), "\n")
cat("\n")
fulljoin <- full_join(capacity, generation,
by = c("yr", "utilcode", "plntcode", "overnightcategory", "fuel.general")) %>%
select(yr, utilcode, plntcode, overnightcategory, fuel.general) %>%
distinct()
cat("Mapped fulljoin \n")
cat("DF size (agg'd over vintage): ", dim(fulljoin), "\n")
cat("Cols: ", names(fulljoin), "\n")
cat("\n")
cat("Merge on yr.utilcode.plntcode.oc.fg: mer1.fleet \n")
cat("Merged DF size (agg'd over vintage): ",dim(mer1.fleet), "\n")
cat("Retention (fulljoin): ", 100 * nrow(mer1.fleet)/ nrow(fulljoin), "% \n" )
cat("Retention (orig.fleet): ", 100 * nrow(mer1.fleet)/ nrow(orig.fleet), "% \n" )
cat("\n\n\n")
# orig.unmapped.fleet <- capacity.unmapped %>%
# select(yr, utilcode, plntcode, primemover, fuel) %>%
# distinct()
# cat("Unmapped Capacity Dataset \n")
# cat("DF size (agg'd over vintage): ", dim(orig.unmapped.fleet), "\n")
# cat(names(orig.unmapped.fleet), "\n")
# cat("\n")
#
# cat("Unmapped Generation Dataset \n")
# cat("DF size: ", dim(generation.unmapped), "\n")
# cat(names(generation.unmapped), "\n")
# cat("\n")
#
# fulljoin.unmapped <- full_join(capacity.unmapped, generation.unmapped,
# by = c("yr", "utilcode", "plntcode", "primemover", "fuel")) %>%
# select(yr, utilcode, plntcode, primemover, fuel ) %>%
# distinct()
# cat("Unmapped fulljoin")
# cat("DF size (agg'd over vintage): ", dim(fulljoin.unmapped), "\n")
# cat(names(fulljoin.unmapped), "\n")
# cat("\n")
cat("NEXT TWO OPTIONS MERGE *THEN* MAP, SO RETENTION IS COMPARED TO SAME 'FULLJOIN' AND 'ORIG.FLEET' DF'S AS ABOVE\n\n")
cat("Merge on yr.utilcode.plntcode.pm.f: mer2.fleet \n")
cat("Merged DF size (agg over vintage): ",dim(mer2.fleet), "\n")
cat("Retention (fulljoin): ", 100 * nrow(mer2.fleet)/ nrow(fulljoin), "% \n" )
cat("Retention (orig.fleet): ", 100 * nrow(mer2.fleet)/ nrow(orig.fleet), "% \n" )
cat("\n")
cat("Merge on yr.plntcode.pm.f: mer3 \n")
cat("Merged df size (agg over vintage): ",dim(mer3.fleet), "\n")
cat("Retention (fulljoin): ", 100 * nrow(mer3.fleet)/ nrow(fulljoin), "% \n" )
cat("Retention (orig.fleet): ", 100 * nrow(mer3.fleet)/ nrow(orig.fleet), "% \n" )
cat("\n\n")
cat("Wonjun's Merged Dataset: mer4.fleet", "\n")
cat("Merged DF size (agg'd over vintage): ", dim(mer4.fleet), "\n")
cat("Retention: unsure \n")
cat("\n\n")
sink() # end logging
print("saving figs/outfile.txt")
# PLOTS -------------------------------------------------------------------
## SAVE ORIG PLOT
fn <- "figs/ORIG.png"
print(paste0("saving ", fn))
png(fn, width=11, height=8.5, units="in", res=250)
multiplot(orig.new.fuel, orig.fuel, orig.new.oc, orig.oc, cols=2)
dev.off()
## SAVE FUEL PLOT
fn <- "figs/Capacity by fuel.png"
print(paste0("saving ", fn))
png(fn, width=11, height=17, units="in", res=250)
grid_arrange_shared_legend(orig.fuel, orig.new.fuel,
mer1.fuel, mer1.new.fuel,
mer2.fuel, mer2.new.fuel,
mer3.fuel, mer3.new.fuel,
mer4.fuel, mer4.new.fuel,
position="right", ncol=2, nrow=5)
dev.off()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.