Electric Vehicles (EVs) are becoming increasingly important in reducing carbon emissions and promoting sustainable transportation. This report analyzes EV adoption trends across different countries using publicly available datasets from the International Energy Agency (IEA).
The project focuses on: - EV stock growth over time - Country-wise EV adoption - Market share comparison - Relationship between charging infrastructure and EV growth - Trends in battery electric vehicles (BEVs) and plug-in hybrid electric vehicles (PHEVs)
Dataset Source: https://www.iea.org/data-and-statistics/data-tools/global-ev-data-explorer
Visualization Reference: https://www.iea.org/energy-system/transport/electric-vehicles
# Import dataset
ev_data <- read_excel("EVDataExplorer2025.xlsx")
names(ev_data)
## [1] "region_country" "category" "parameter" "mode"
## [5] "powertrain" "year" "unit" "value"
## [9] "Aggregate group"
# Convert to tibble
ev_data <- tibble(ev_data)
# Display first rows
head(ev_data)
## # A tibble: 6 × 9
## region_country category parameter mode powertrain year unit value
## <chr> <chr> <chr> <chr> <chr> <dbl> <chr> <dbl>
## 1 World Projection-STEPS EV stock 2 and… BEV 2030 Vehi… 1.7 e8
## 2 World Projection-STEPS EV stock Cars BEV 2030 Vehi… 1.5 e8
## 3 China Projection-STEPS EV stock 2 and… BEV 2030 Vehi… 9.1 e7
## 4 China Projection-STEPS EV stock Cars BEV 2030 Vehi… 8.2 e7
## 5 World Projection-STEPS EV stock Cars PHEV 2030 Vehi… 8.2 e7
## 6 World Historical EV stock 2 and… BEV 2024 Vehi… 7.90e7
## # ℹ 1 more variable: `Aggregate group` <chr>
# Filter important columns
ev_clean <- ev_data %>%
select(region_country,
category,
parameter,
mode,
powertrain,
year,
unit,
value)
# Remove missing values
ev_clean <- na.omit(ev_clean)
# Display cleaned data
head(ev_clean)
## # A tibble: 6 × 8
## region_country category parameter mode powertrain year unit value
## <chr> <chr> <chr> <chr> <chr> <dbl> <chr> <dbl>
## 1 World Projection-STEPS EV stock 2 and… BEV 2030 Vehi… 1.7 e8
## 2 World Projection-STEPS EV stock Cars BEV 2030 Vehi… 1.5 e8
## 3 China Projection-STEPS EV stock 2 and… BEV 2030 Vehi… 9.1 e7
## 4 China Projection-STEPS EV stock Cars BEV 2030 Vehi… 8.2 e7
## 5 World Projection-STEPS EV stock Cars PHEV 2030 Vehi… 8.2 e7
## 6 World Historical EV stock 2 and… BEV 2024 Vehi… 7.90e7
This visualization shows how global EV stock has increased over the years.
fig1 <- ev_clean %>%
filter(parameter == "EV stock") %>%
group_by(year) %>%
summarise(total_ev = sum(value, na.rm = TRUE))
ggplot(fig1, aes(x = year, y = total_ev)) +
geom_line(color = "blue", linewidth = 1.2) +
geom_point(color = "red") +
labs(
title = "Global EV Stock Growth Over Time",
x = "Year",
y = "Total EV Stock"
) +
theme_minimal()
This bar chart compares EV sales across countries.
fig2 <- ev_clean %>%
filter(parameter == "EV sales") %>%
group_by(region_country) %>%
summarise(total_sales = sum(value, na.rm = TRUE)) %>%
arrange(desc(total_sales)) %>%
slice(1:10)
ggplot(fig2, aes(x = reorder(region_country, total_sales),
y = total_sales)) +
geom_bar(stat = "identity", fill = "darkgreen") +
coord_flip() +
labs(
title = "Top 10 Countries by EV Sales",
x = "Country",
y = "EV Sales"
) +
theme_minimal()
This graph compares Battery Electric Vehicles and Plug-in Hybrid Electric Vehicles.
fig4 <- ev_clean %>%
filter(powertrain %in% c("BEV", "PHEV"),
parameter == "EV sales") %>%
group_by(powertrain, year) %>%
summarise(total = sum(value, na.rm = TRUE))
## `summarise()` has grouped output by 'powertrain'. You can override using the
## `.groups` argument.
ggplot(fig4,
aes(x = year,
y = total,
color = powertrain)) +
geom_line(linewidth = 1.2) +
labs(
title = "BEV vs PHEV Sales Trends",
x = "Year",
y = "Sales",
color = "Vehicle Type"
) +
theme_minimal()
This histogram displays the distribution of EV sales values.
fig5 <- ev_clean %>%
filter(parameter == "EV sales")
ggplot(fig5, aes(x = value)) +
geom_histogram(bins = 30,
fill = "orange",
color = "black") +
labs(
title = "Distribution of EV Sales",
x = "EV Sales",
y = "Frequency"
) +
theme_minimal()
This visualization shows the relationship between EV sales and EV stock.
sales_data <- ev_clean %>%
filter(parameter == "EV sales") %>%
select(region_country, year, sales = value)
stock_data <- ev_clean %>%
filter(parameter == "EV stock") %>%
select(region_country, year, stock = value)
scatter_data <- inner_join(sales_data,
stock_data,
by = c("region_country", "year"))
## Warning in inner_join(sales_data, stock_data, by = c("region_country", "year")): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 1 of `x` matches multiple rows in `y`.
## ℹ Row 1 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
ggplot(scatter_data,
aes(x = sales,
y = stock)) +
geom_point(color = "darkred", alpha = 0.6) +
labs(
title = "EV Sales vs EV Stock",
x = "EV Sales",
y = "EV Stock"
) +
theme_minimal()
This interactive chart displays EV stock trends.
interactive_data <- fig1
plot_ly(interactive_data,
x = ~year,
y = ~total_ev,
type = 'scatter',
mode = 'lines+markers')
This chart compares adoption of different powertrain technologies.
fig8 <- ev_clean %>%
filter(parameter == "EV stock") %>%
group_by(powertrain) %>%
summarise(total_stock = sum(value, na.rm = TRUE))
ggplot(fig8,
aes(x = reorder(powertrain, total_stock),
y = total_stock,
fill = powertrain)) +
geom_bar(stat = "identity") +
labs(
title = "EV Adoption by Powertrain Type",
x = "Powertrain",
y = "Total EV Stock"
) +
theme_minimal()
The analysis demonstrates rapid growth in Electric Vehicle adoption globally. Countries such as China, the United States, and several European nations dominate EV sales and stock. Battery Electric Vehicles (BEVs) show stronger growth compared to Plug-in Hybrid Electric Vehicles (PHEVs).
The visualizations also highlight increasing market share and expanding adoption trends over time, indicating a global transition toward sustainable transportation systems.