Name and Source with Access Information:
Dataset: Our World in Data (OWID), CO₂ and Greenhouse Gas Emissions Dataset
Source: Publicly available on GitHub: OWID CO2 Data Repository.
Primary Data Providers: Emissions: Global Carbon Project GDP (University of Groningen GGDC’s Maddison Project Database, Bolt and van Zanden, 2024).
Collection Methodology:
Emissions Data: Compiled from national inventories, international organizations, and peer-reviewed studies.
GDP Data: Adjusted for inflation and purchasing power parity using the Maddison Project Database.
Sampling Approach: No sampling—data is collected for all countries and years where available.
Population of Interest:
Scope: National-level data for USA, Canada, Germany, and Poland (selected for their contrasting economic structures and emissions trajectories).
Variables: Includes CO₂ emissions (production- and consumption-based), GDP, population, and energy-related metrics.
Granularity: National-level data (no subnational breakdowns).
Time Period: 1850–2023 (analysis will focus on 1950–2023 to align with policy and economic development trends).
Data Structure:
Type: Observational panel data (country-year format).
Format: Each row represents a country-year observation, with columns for variables like country, year, gdp, co2, population, etc.
File Format: CSV
Strengths:
Comprehensive country coverage, including 260+ countries over 170+ years, enabling longitudinal and cross-country comparisons.
Standardized metrics with variables like co2_per_capita and gdp are inflation-adjusted for comparability and multiple emission metrics (energy, consumption, emissions, gdp, etc.).
Transparency of data with full documentation of sources and methodologies publicly available on GitHub.
Limitations:
Aggregate national level may data masks subnational disparities and variations.
Data on important variables in early years of collection is missing for some countries (mostly smaller countries).
Limited policy variables outside of the emissions with no direct metrics for climate policies (e.g., carbon tax rates).
Sample Restrictions:
Focus on four countries ensures analytical depth but limits generalizability to the Global South and possible variation within the Global North.
packages <- c("tidyverse", "srvyr", "broom","gt", "modelsummary",
"gapminder", "fst", "ggridges", "readxl", "readr","here")
new_packages <- packages[!(packages %in% installed.packages()[,"Package"])]
if(length(new_packages)) install.packages(new_packages)
lapply(packages, library, character.only = TRUE)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── 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
##
## Attaching package: 'srvyr'
##
##
## The following object is masked from 'package:stats':
##
## filter
##
##
## `modelsummary` 2.0.0 now uses `tinytable` as its default table-drawing
## backend. Learn more at: https://vincentarelbundock.github.io/tinytable/
##
## Revert to `kableExtra` for one session:
##
## options(modelsummary_factory_default = 'kableExtra')
## options(modelsummary_factory_latex = 'kableExtra')
## options(modelsummary_factory_html = 'kableExtra')
##
## Silence this message forever:
##
## config_modelsummary(startup_message = FALSE)
##
## here() starts at C:/Users/marco/OneDrive/R ecosystem/RStudio
## [[1]]
## [1] "lubridate" "forcats" "stringr" "dplyr" "purrr" "readr"
## [7] "tidyr" "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [13] "grDevices" "utils" "datasets" "methods" "base"
##
## [[2]]
## [1] "srvyr" "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [7] "readr" "tidyr" "tibble" "ggplot2" "tidyverse" "stats"
## [13] "graphics" "grDevices" "utils" "datasets" "methods" "base"
##
## [[3]]
## [1] "broom" "srvyr" "lubridate" "forcats" "stringr" "dplyr"
## [7] "purrr" "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [13] "stats" "graphics" "grDevices" "utils" "datasets" "methods"
## [19] "base"
##
## [[4]]
## [1] "gt" "broom" "srvyr" "lubridate" "forcats" "stringr"
## [7] "dplyr" "purrr" "readr" "tidyr" "tibble" "ggplot2"
## [13] "tidyverse" "stats" "graphics" "grDevices" "utils" "datasets"
## [19] "methods" "base"
##
## [[5]]
## [1] "modelsummary" "gt" "broom" "srvyr" "lubridate"
## [6] "forcats" "stringr" "dplyr" "purrr" "readr"
## [11] "tidyr" "tibble" "ggplot2" "tidyverse" "stats"
## [16] "graphics" "grDevices" "utils" "datasets" "methods"
## [21] "base"
##
## [[6]]
## [1] "gapminder" "modelsummary" "gt" "broom" "srvyr"
## [6] "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [11] "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [16] "stats" "graphics" "grDevices" "utils" "datasets"
## [21] "methods" "base"
##
## [[7]]
## [1] "fst" "gapminder" "modelsummary" "gt" "broom"
## [6] "srvyr" "lubridate" "forcats" "stringr" "dplyr"
## [11] "purrr" "readr" "tidyr" "tibble" "ggplot2"
## [16] "tidyverse" "stats" "graphics" "grDevices" "utils"
## [21] "datasets" "methods" "base"
##
## [[8]]
## [1] "ggridges" "fst" "gapminder" "modelsummary" "gt"
## [6] "broom" "srvyr" "lubridate" "forcats" "stringr"
## [11] "dplyr" "purrr" "readr" "tidyr" "tibble"
## [16] "ggplot2" "tidyverse" "stats" "graphics" "grDevices"
## [21] "utils" "datasets" "methods" "base"
##
## [[9]]
## [1] "readxl" "ggridges" "fst" "gapminder" "modelsummary"
## [6] "gt" "broom" "srvyr" "lubridate" "forcats"
## [11] "stringr" "dplyr" "purrr" "readr" "tidyr"
## [16] "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [21] "grDevices" "utils" "datasets" "methods" "base"
##
## [[10]]
## [1] "readxl" "ggridges" "fst" "gapminder" "modelsummary"
## [6] "gt" "broom" "srvyr" "lubridate" "forcats"
## [11] "stringr" "dplyr" "purrr" "readr" "tidyr"
## [16] "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [21] "grDevices" "utils" "datasets" "methods" "base"
##
## [[11]]
## [1] "here" "readxl" "ggridges" "fst" "gapminder"
## [6] "modelsummary" "gt" "broom" "srvyr" "lubridate"
## [11] "forcats" "stringr" "dplyr" "purrr" "readr"
## [16] "tidyr" "tibble" "ggplot2" "tidyverse" "stats"
## [21] "graphics" "grDevices" "utils" "datasets" "methods"
## [26] "base"
GHG_emissions <- read_excel("C:/Users/marco/OneDrive/R ecosystem/RStudio/owid-co2-data.xlsx")
glimpse(GHG_emissions)
## Rows: 50,191
## Columns: 79
## $ country <chr> "Afghanistan", "Afghanistan"…
## $ year <dbl> 1750, 1751, 1752, 1753, 1754…
## $ iso_code <chr> "AFG", "AFG", "AFG", "AFG", …
## $ population <dbl> 2802560, NA, NA, NA, NA, NA,…
## $ gdp <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cement_co2 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ cement_co2_per_capita <dbl> 0, NA, NA, NA, NA, NA, NA, N…
## $ co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_growth_abs <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_growth_prct <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc_growth_abs <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc_growth_prct <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc_per_gdp <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_including_luc_per_unit_energy <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_per_gdp <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ co2_per_unit_energy <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ coal_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ coal_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ consumption_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ consumption_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ consumption_co2_per_gdp <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_cement_co2 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ cumulative_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_co2_including_luc <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_coal_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_flaring_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_gas_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_luc_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_oil_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ cumulative_other_co2 <lgl> NA, NA, NA, NA, NA, NA, NA, …
## $ energy_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ energy_per_gdp <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ flaring_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ flaring_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ gas_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ gas_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ ghg_excluding_lucf_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ ghg_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ land_use_change_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ land_use_change_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ methane <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ methane_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ nitrous_oxide <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ nitrous_oxide_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ oil_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ oil_co2_per_capita <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ other_co2_per_capita <lgl> NA, NA, NA, NA, NA, NA, NA, …
## $ other_industry_co2 <lgl> NA, NA, NA, NA, NA, NA, NA, …
## $ primary_energy_consumption <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cement_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_co2_including_luc <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_coal_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_cement_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_co2_including_luc <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_coal_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_flaring_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_gas_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_luc_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_oil_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_cumulative_other_co2 <lgl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_flaring_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_gas_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_luc_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_oil_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_global_other_co2 <lgl> NA, NA, NA, NA, NA, NA, NA, …
## $ share_of_temperature_change_from_ghg <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ temperature_change_from_ch4 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ temperature_change_from_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ temperature_change_from_ghg <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ temperature_change_from_n2o <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ total_ghg <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ total_ghg_excluding_lucf <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ trade_co2 <dbl> NA, NA, NA, NA, NA, NA, NA, …
## $ trade_co2_share <dbl> NA, NA, NA, NA, NA, NA, NA, …
key_vars_summary <- GHG_emissions %>%
filter(country %in% c("Poland", "Germany", "United States", "Canada")) %>%
filter(year >= 1950 & year <= 2022) %>%
filter(!is.na(co2) & !is.na(gdp)) %>%
group_by(country) %>%
summarise(
Years = paste0(min(year, na.rm = TRUE), "-", max(year, na.rm = TRUE)),
CO2_mean = mean(co2, na.rm = TRUE),
CO2_median = median(co2, na.rm = TRUE),
CO2_range = paste(round(min(co2, na.rm = TRUE), 2), "-", round(max(co2, na.rm = TRUE), 2)),
GDP_per_capita_mean = mean(gdp / population, na.rm = TRUE),
GDP_per_capita_median = median(gdp / population, na.rm = TRUE),
GDP_per_capita_range = paste(round(min(gdp / population, na.rm = TRUE), 2), "-", round(max(gdp / population, na.rm = TRUE), 2)),
.groups = "drop"
)
print(key_vars_summary)
## # A tibble: 4 × 8
## country Years CO2_mean CO2_median CO2_range GDP_per_capita_mean
## <chr> <chr> <dbl> <dbl> <chr> <dbl>
## 1 Canada 1950-2022 414. 442. 154.13 - 591.… 28438.
## 2 Germany 1950-2022 895. 915. 510.68 - 1117… 25902.
## 3 Poland 1950-2022 316. 326. 112.12 - 463.… 11916.
## 4 United States 1950-2022 4623. 4890. 2489.46 - 613… 34521.
## # ℹ 2 more variables: GDP_per_capita_median <dbl>, GDP_per_capita_range <chr>
key_vars_table <- key_vars_summary %>%
gt() %>%
cols_label(
country = "Country",
Years = "Year Range",
CO2_mean = "Mean CO₂ (Mt)",
CO2_median = "Median CO₂ (Mt)",
CO2_range = "CO₂ Range (Mt)",
GDP_per_capita_mean = "Mean GDP per capita (int-$)",
GDP_per_capita_median = "Median GDP per capita (int-$)",
GDP_per_capita_range = "GDP per capita Range (int-$)"
) %>%
fmt_number(columns = c(CO2_mean, CO2_median, GDP_per_capita_mean, GDP_per_capita_median), decimals = 2) %>%
tab_header(
title = md("**Descriptive Statistics for Key Variables**"),
subtitle = md("CO₂ Emissions and GDP per Capita")
) %>%
tab_source_note(
source_note = md("Data year rage 1950–2022. CO₂ measured in million tonnes (Mt); GDP per capita in international-$.")
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
)
key_vars_table
| Descriptive Statistics for Key Variables | |||||||
| CO₂ Emissions and GDP per Capita | |||||||
| Country | Year Range | Mean CO₂ (Mt) | Median CO₂ (Mt) | CO₂ Range (Mt) | Mean GDP per capita (int-$) | Median GDP per capita (int-$) | GDP per capita Range (int-$) |
|---|---|---|---|---|---|---|---|
| Canada | 1950-2022 | 414.45 | 441.68 | 154.13 - 591.89 | 28,438.19 | 28,464.14 | 11850.08 - 45369.36 |
| Germany | 1950-2022 | 894.60 | 915.25 | 510.68 - 1117.89 | 25,902.46 | 24,590.45 | 6055.53 - 46510.66 |
| Poland | 1950-2022 | 315.63 | 325.96 | 112.12 - 463.73 | 11,915.72 | 9,077.04 | 3906.9 - 32069.76 |
| United States | 1950-2022 | 4,623.22 | 4,889.95 | 2489.46 - 6132.18 | 34,520.51 | 33,391.68 | 15049.09 - 57075.34 |
| Data year rage 1950–2022. CO₂ measured in million tonnes (Mt); GDP per capita in international-$. | |||||||
co2_per_gdp_countries_clean <- GHG_emissions %>%
filter(year %in% c(1950, 1990, 2022)) %>%
filter(!is.na(co2_per_gdp))%>%
filter(country %in% c("Poland", "Germany", "United States", "Canada")) %>%
select(year, country, co2_per_gdp)
print(co2_per_gdp_countries_clean)
## # A tibble: 12 × 3
## year country co2_per_gdp
## <dbl> <chr> <dbl>
## 1 1950 Canada 0.947
## 2 1990 Canada 0.548
## 3 2022 Canada 0.313
## 4 1950 Germany 1.21
## 5 1990 Germany 0.523
## 6 2022 Germany 0.172
## 7 1950 Poland 1.16
## 8 1990 Poland 1.21
## 9 2022 Poland 0.256
## 10 1950 United States 1.10
## 11 1990 United States 0.554
## 12 2022 United States 0.261
co2_wide <- co2_per_gdp_countries_clean %>%
pivot_wider(
names_from = year,
values_from = co2_per_gdp,
names_prefix = "co2_per_gdp_"
)
change_co2_pergdp <- co2_wide %>%
mutate(
change_1950_1990 = co2_per_gdp_1950 - co2_per_gdp_1990,
change_1990_2022 = co2_per_gdp_1990 - co2_per_gdp_2022
)
print(change_co2_pergdp)
## # A tibble: 4 × 6
## country co2_per_gdp_1950 co2_per_gdp_1990 co2_per_gdp_2022 change_1950_1990
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Canada 0.947 0.548 0.313 0.399
## 2 Germany 1.21 0.523 0.172 0.684
## 3 Poland 1.16 1.21 0.256 -0.0540
## 4 United St… 1.10 0.554 0.261 0.541
## # ℹ 1 more variable: change_1990_2022 <dbl>
final_table <- change_co2_pergdp %>%
gt() %>%
cols_label(
country = "Country",
co2_per_gdp_1950 = "CO2 per GDP (1950)",
co2_per_gdp_1990 = "CO2 per GDP (1990)",
co2_per_gdp_2022 = "CO2 per GDP (2022)",
change_1950_1990 = "Change (1950-1990)",
change_1990_2022 = "Change (1990-2022)"
) %>%
fmt_number(
columns = c(co2_per_gdp_1950, co2_per_gdp_1990, co2_per_gdp_2022, change_1950_1990, change_1990_2022),
decimals = 4
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
) %>%
tab_header(
title = md("**CO2 Emissions per GDP over economic development years**"),
subtitle = md("Annual total emissions of carbon dioxide (CO₂), excluding land-use change, measured in kilograms per dollar of GDP (2011 international-$).")
) %>%
tab_source_note(
source_note = md(
"Hannah Ritchie, Pablo Rosado and Max Roser (2023), \n“CO2 and Greenhouse Gas Emissions” Published online at OurWorldinData.org."
)
) %>%
tab_style(
style = cell_text(size = px(14)),
locations = cells_title(groups = "subtitle")
) %>%
tab_style(
style = cell_text(align = "center"),
locations = cells_source_notes()
)
final_table
| CO2 Emissions per GDP over economic development years | |||||
| Annual total emissions of carbon dioxide (CO₂), excluding land-use change, measured in kilograms per dollar of GDP (2011 international-$). | |||||
| Country | CO2 per GDP (1950) | CO2 per GDP (1990) | CO2 per GDP (2022) | Change (1950-1990) | Change (1990-2022) |
|---|---|---|---|---|---|
| Canada | 0.9470 | 0.5480 | 0.3130 | 0.3990 | 0.2350 |
| Germany | 1.2070 | 0.5230 | 0.1720 | 0.6840 | 0.3510 |
| Poland | 1.1580 | 1.2120 | 0.2560 | −0.0540 | 0.9560 |
| United States | 1.0950 | 0.5540 | 0.2610 | 0.5410 | 0.2930 |
| Hannah Ritchie, Pablo Rosado and Max Roser (2023), “CO2 and Greenhouse Gas Emissions” Published online at OurWorldinData.org. |
|||||
co2_per_gdp_countries <- GHG_emissions %>%
filter(year >= 1950 & year <= 2022) %>%
filter(!is.na(co2_per_gdp))%>%
filter(country %in% c("Poland", "Germany", "United States", "Canada")) %>%
select(year, country, co2_per_gdp) %>%
group_by(country)
print(co2_per_gdp_countries)
## # A tibble: 292 × 3
## # Groups: country [4]
## year country co2_per_gdp
## <dbl> <chr> <dbl>
## 1 1950 Canada 0.947
## 2 1951 Canada 0.945
## 3 1952 Canada 0.863
## 4 1953 Canada 0.831
## 5 1954 Canada 0.849
## 6 1955 Canada 0.808
## 7 1956 Canada 0.837
## 8 1957 Canada 0.783
## 9 1958 Canada 0.767
## 10 1959 Canada 0.746
## # ℹ 282 more rows
ggplot(
co2_per_gdp_countries,
aes(x = year, y = co2_per_gdp,
color = country, fill = country)
) +
geom_line(linewidth = 1.2) +
scale_color_brewer(palette = "Set1") +
theme_minimal() +
theme(
panel.grid = element_blank(),
plot.title = element_text(face = "bold", size = 14, hjust = 0.5),
plot.subtitle = element_text(size = 12, hjust = 0.5),
legend.position = "right",
legend.title = element_text(face = "bold", size = 12),
axis.title.y = element_text(size = 8, hjust = 0.5),
plot.caption = element_text(face = "italic", hjust = 0)
) +
labs(
title = "CO2 emissions Per GDP over economic development years",
subtitle = "in Selected Countries",
x = "Year",
y = "CO2 per GDP, measured in kilograms per dollar of GDP (2011 international-$)",
color = "Country",
fill = "Country",
caption = paste("Hannah Ritchie, Pablo Rosado and Max Roser (2023) \n“CO2 and Greenhouse Gas Emissions” Published online at OurWorldinData.org.")
) +
scale_y_continuous(
breaks = seq(0, max(co2_per_gdp_countries$co2_per_gdp, na.rm = TRUE), by = 0.1)
) +
scale_x_continuous(
breaks = seq(0, max(co2_per_gdp_countries$year, na.rm = TRUE), by = 10)
)
The graph illustrates a general trend highlighting a divergence between more developed economies, such as the United States, Canada, and Germany, which have demonstrated a stable reduction in CO2 emissions per unit of GDP from earlier years, and less economically developed nations that have experienced significant economic growth and have abruptly achieved similar levels of CO2 reductions per GDP in recent years.