Assessment declaration checklist

Please carefully read the statements below and check each box if you agree with the declaration. If you do not check all boxes, your assignment will not be marked. If you make a false declaration on any of these points, you may be investigated for academic misconduct. Students found to have breached academic integrity may receive official warnings and/or serious academic penalties. Please read more about academic integrity here. If you are unsure about any of these points or feel your assessment might breach academic integrity, please contact your course coordinator for support. It is important that you DO NOT submit any assessment until you can complete the declaration truthfully.

By checking the boxes below, I declare the following:

I understand that:

I agree and acknowledge that:

Deconstruct

Original

The original data visualisation selected for the assignment was as follows:


Source: Visual Capatitalist (2025)


Objective and Audience

The original data visualization is a choropleth world map created by Visual Capitalist using data from the United Nations, Department of Economic and Social Affairs, Population Division, (2024). It presents the average life expectancy at birth in 2025 across different countries, using a colour scale from 55 to 90 years. The map highlights extremes by labelling Monaco as the country with the highest life expectancy and Nigeria as the lowest.

Objective

The purpose of this visualisation is to communicate global differences in life expectancy. By using colour shading across a world map, the visual seeks to help readers quickly identify which regions of the world have higher or lower life expectancy. But still there is a room for improvement in this data visualization.

Target Audience

Since the data is publicly available on the Visual Capitalist webpage, the target audience includes the general public. This includes casual readers seeking quick insights, as well as educators, policymakers, and professionals who may use the map as an entry point for discussion.

Improvements

The original data visualization chosen could be improved in the three following ways:

  • Issue 1 - Colour Scale and Accessibility

    Example - The map uses a rainbow-like colour gradient (55–90 years) that is not colour-blind safe and makes it difficult to distinguish close values. For instance, neighbouring countries with small differences in life expectancy may appear more different than they really are. 
    
    Impact - This reduces accessibility for colour-blind viewers and risks misrepresenting. 
    
    Solution - Applying a sequential colour palette (e.g., a single hue light-to-dark scale) would improve interpretability and align with best practice
  • Issue 2 - Precision and Comparability

     Example - The choropleth format makes it difficult to compare countries directly, especially small countries like Monaco or island states that are nearly invisible on the map. The main insight (Monaco vs Nigeria) is highlighted with labels, but intermediate rankings are unclear.
    
     Impact - Readers cannot accurately compare or rank countries, which weakens the message.
    
     Solution - A ranked bar chart or slopegraph reconstruction would improve precision and highlight both extremes and regional differences clearly.
  • Issue 3 - Labeling and Clarity

     Example - Only two countries are labelled (Monaco and Nigeria).
    
     Impact - This limits clarity and forces interpretation, especially for non-expert readers.
    
     Solution - Adding clear axis titles, bar labels (exact values), and a caption explaining the data source would enhance readability.

Reconstruct

Code

# Load Packages 
library(readxl)
library(dplyr)
library(ggplot2)
library(forcats) #handles categorical/factor variables

# File 
wpp_path <- "/Users/chamudi/Desktop/RMIT/1st Year 2nd Semester/Data Visualization/Assignments/Assignment 2/Life Expectancy by Country in 2025.xlsx"

# Read and Tidy
wpp_raw <- read_excel(wpp_path, skip = 16)

# suppressWarnings stops noisy NAs
countries_2025 <- wpp_raw %>%
  mutate(Year = suppressWarnings(as.numeric(Year))) %>%
  filter(Year == 2025, Type == "Country/Area") %>%
  transmute(
    Country = `Region, subregion, country or area *`,
    LifeExp  = suppressWarnings(as.numeric(`0`))   # life expectancy at birth
  ) %>%
  # removes missing/unrealistic values
  filter(!is.na(LifeExp), LifeExp >= 40, LifeExp <= 95) %>%
  arrange(desc(LifeExp)) %>%
  mutate(Country = fct_reorder(Country, LifeExp)) #reorders country factors based on life expectancy

# Identify extremes
# slice_max / slice_min - Extract the country with the highest and lowest life expectancy.
country_hi <- countries_2025 %>% slice_max(LifeExp, n = 1) %>% pull(Country)
country_lo <- countries_2025 %>% slice_min(LifeExp, n = 1) %>% pull(Country)

countries_2025 <- countries_2025 %>%
  mutate(Extremes = case_when(
    Country == country_hi ~ "Highest",
    Country == country_lo ~ "Lowest",
    TRUE                  ~ "Other"
  ))

# Plot 1: All countries
p_all_countries <- ggplot(countries_2025, aes(x = Country, y = LifeExp, fill = Extremes)) +
  geom_col() +
  coord_flip() +
  scale_fill_manual(values = c(
    "Highest" = "#C2185B",   # deep pink
    "Lowest"  = "#F48FB1",   # light pink
    "Other"   = "grey80"
  )) +
  scale_y_continuous(breaks = seq(0, max(countries_2025$LifeExp, na.rm = TRUE), by = 5)) +
  labs(
    title = "Life Expectancy at Birth by Country (2025)",
    subtitle = paste0("Highest: ", country_hi, " | Lowest: ", country_lo),
    x = "Country",
    y = "Life Expectancy (Years)",
    caption = "Source: United Nations, Department of Economic and Social Affairs, Population Division (2024)"
  ) +
  theme_minimal(base_size = 11) +
  theme(
    legend.title = element_blank(),
    axis.text.y  = element_text(size = 6)  # many countries; keep labels compact
  )

# Subset for zoomed comparison: Top & Bottom 15 Each
top_bottom_15 <- bind_rows(
  countries_2025 %>% slice_max(LifeExp, n = 15),
  countries_2025 %>% slice_min(LifeExp, n = 15)
) %>%
  arrange(LifeExp) %>%
  mutate(Country = factor(Country, levels = unique(Country)))

# Plot 2: Zoomed (Top & Bottom 15 with Labels) 
p_zoom_top_bottom <- ggplot(top_bottom_15, aes(x = Country, y = LifeExp, fill = Extremes)) +
  geom_col() +
  geom_text(aes(label = round(LifeExp, 0)), hjust = -0.1, size = 3) +
  coord_flip() +
  scale_fill_manual(values = c(
    "Highest" = "#C2185B",
    "Lowest"  = "#F48FB1",
    "Other"   = "grey80"
  )) +
  scale_y_continuous(breaks = seq(0, max(top_bottom_15$LifeExp, na.rm = TRUE), by = 5)) +
  labs(
    title = "Life Expectancy at Birth (Top & Bottom 15 Countries, 2025)",
    subtitle = paste0("Highest: ", country_hi, " | Lowest: ", country_lo, " | Values rounded to whole years"),
    x = "Country",
    y = "Life Expectancy (years)",
    caption = "Source: United Nations, Department of Economic and Social Affairs, Population Division (2024)"
  ) +
  theme_minimal(base_size = 11) +
  theme(legend.title = element_blank())

# Print
print(p_all_countries)

print(p_zoom_top_bottom)

Reconstruction

In this section, Reconstruction, first plot has focused all the countries. In the second plot, rather than focusing on all ~200 countries, I focused on top 15 and bottom 15 countries. This choice was made for clarity and readability.

Including every country with labels results in a cluttered chart where country names overlap and values become unreadable. In the original map also it was the key weakness that it is difficult to extract precise comparisons.

The original visualization emphasized the extremes by labeling Monaco (highest) and Nigeria (lowest). By focusing on the top and bottom 15 countries, the top 10 life expectancy countries retains as the core message according to (Rao, 2024).

Issues Resolved

The original choropleth used a rainbow-like gradient, which can be misleading and difficult to interpret (especially for colour-blind viewers). All countries are shown in grey, while only Monaco (highest) and Nigeria (lowest) are highlighted in contrasting pink tones. It gives message without overwhelming them with unnecessary colour variation.

On the original choropleth, viewers had to estimate life expectancy values from a colour scale, making it difficult to compare countries accurately. The reconstruction uses a ranked bar chart, where differences are conveyed by the length and position of bars. This encoding method is far more precise, allowing viewers to make accurate comparisons at a glance. The zoomed view of the top and bottom 15 countries further enhances comparability by clearly showing the spread between the highest and lowest life expectancies.

The original visualisation only labelled Monaco and Nigeria, leaving most values unclear. In the reconstruction, the zoomed chart includes direct value labels (rounded to whole years), along with clear axis titles and a caption stating the data source.

RPubs Link - https://rpubs.com/chamudi_a/DeconstructReconstructWebReport

References