With the oversupply of Solar PVs and growing electricity demand with the global transition to green economy in the future, we would like to explore the supply and demand of Solar PVs from today to 2050. The demand of Solar PVs will be projected under three different scenarios, including Stated Policy scenario, Net Zero Emissions by 2050 scenario and 100% Solar PVs scenario, using the data on the estimated amount of electricity generation by the Net Zero Emissions by 2050 scenario provided by the IEA.
Current Stated Policy Scenario
The Stated Policies Scenario (STEPS) is designed to provide a sense of the prevailing direction of energy system progression, based on a detailed review of the current policy landscape. It provides a more granular, sector-by-sector evaluation of the policies that have been put in place to reach stated goals and other energy-related objectives, taking account not only of existing policies and measures but also those that are under development. The STEPS provides a more conservative benchmark for the future.
Net Zero Emissions by 2050 Scenario
The Net Zero Emissions by 2050 Scenario (NZE Scenario) is a normative scenario that shows a pathway for the global energy sector to achieve net zero CO2 emissions by 2050, with advanced economies reaching net zero emissions in advance of others. This scenario also meets key energy-related Sustainable Development Goals (SDGs), in particular universal energy access by 2030 and major improvements in air quality. It is consistent with limiting the global temperature rise to 1.5 °C
Warning: package 'tidyr' was built under R version 4.2.3
Warning: package 'readr' was built under R version 4.2.3
Warning: package 'dplyr' was built under R version 4.2.3
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.0
✔ ggplot2 3.4.4 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.1
✔ purrr 1.0.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)library(here)
here() starts at /Users/annaliceticha/Desktop/Sus Fin App & Meth/Sus Fin Final/00_data_raw
library(ggplot2)library(patchwork)
Warning: package 'patchwork' was built under R version 4.2.3
library(dplyr)library(plotly)
Warning: package 'plotly' was built under R version 4.2.3
Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':
last_plot
The following object is masked from 'package:stats':
filter
The following object is masked from 'package:graphics':
layout
library(rnaturalearth)
Warning: package 'rnaturalearth' was built under R version 4.2.3
library(rnaturalearthdata)
Warning: package 'rnaturalearthdata' was built under R version 4.2.3
Attaching package: 'rnaturalearthdata'
The following object is masked from 'package:rnaturalearth':
countries110
library(plotly)library(scales)
Warning: package 'scales' was built under R version 4.2.3
Attaching package: 'scales'
The following object is masked from 'package:purrr':
discard
The following object is masked from 'package:readr':
col_factor
library(leaflet)
Warning: package 'leaflet' was built under R version 4.2.3
library(htmlwidgets)
Warning: package 'htmlwidgets' was built under R version 4.2.3
library(rsconnect)
Warning: package 'rsconnect' was built under R version 4.2.3
New names:
New names:
• `` -> `...1`
• `` -> `...2`
path_to_sheet <-"/Users/annaliceticha/Desktop/Sus Fin App & Meth/Sus Fin Final/00_data_raw/CO2 data.xlsx"CO2_data <-partial(.f = read_excel,path = path_to_sheet,sheet ="CO2",col_names =FALSE)CO2_data <-suppressMessages(CO2_data(range ="B2:C274"))CO2_data <- CO2_data |>rename(year =`...1`, CO2_emissions =`...2`)CO2_data$scenario <-"Historical"path_to_sheet <-"/Users/annaliceticha/Desktop/Sus Fin App & Meth/Sus Fin Final/00_data_raw/WEO2023_Free_Dataset.xlsx"CO2proj_data <-partial(.f = read_excel,path = path_to_sheet,sheet ="World CO2 Emissions",col_names =FALSE)CO2_STEPS_data <-suppressMessages(CO2proj_data(range ="N7:Q8"))CO2_NZE_data <-suppressMessages(CO2proj_data(range ="AF7:AI8"))CO2_NZE_data <-t(CO2_NZE_data)|>as.data.frame()CO2_STEPS_data <-t(CO2_STEPS_data)|>as.data.frame()colnames(CO2_STEPS_data) <-c('year', 'CO2_emissions')colnames(CO2_NZE_data) <-c('year', 'CO2_emissions')combined_CO2_STEPS<-bind_rows(CO2_data, CO2_STEPS_data)|>filter(year >1900)combined_CO2_STEPS$scenario <-"STEPS"combined_CO2_NZE<-bind_rows(CO2_data, CO2_NZE_data)|>filter(year >1900)combined_CO2_NZE$scenario <-"NZE 2050"combined_CO2<-bind_rows(combined_CO2_NZE, combined_CO2_STEPS)p1 <-ggplot(combined_CO2, aes(x = year, y = CO2_emissions, color = scenario)) +geom_line()+scale_color_manual(values =c("NZE 2050"="#008000", "STEPS"="blue")) +labs(title ="Global CO2 Emissions from 1900 to 2050",subtitle ="An assessment on future projections under STEPS vs NZE 2050 scenario",x ="Year",y ="CO2 Emissions (in tonnes)",color ="Scenario") +theme_minimal(base_size =12) +theme(plot.title =element_text(face ="bold", size =18), plot.subtitle =element_text(face ="italic", size =14), plot.caption =element_text(size =8), axis.title =element_text(size =14),axis.text =element_text(size =12), legend.position ="bottom") +scale_x_continuous(breaks =seq(1900, 2050, by =10)) +scale_y_continuous(labels = scales::comma) interactive_plot <-ggplotly(p1)|>layout(title =list(text ='Global CO2 Emissions from 1900 to 2050<br><sub>An assessment of historical data and NZE by 2050 scenario projections</sub>',x =0.5,xanchor ='center',yanchor ='top' ) )interactive_plot