Aceasta este a doua din seria mea de postări despre populație, migrație, diasporă și probleme conexe în Pacific. Vedeți prima postare din serie pentru mai multe fundaluri. Astăzi mă uit la două grafice referitoare la migrația netă și rolul acesteia în creșterea populației insulelor din Pacific. Acestea au fost folosite la începutul prezentării la care se referă aceste postări de blog, ca parte a construirii poveștii despre importanța mișcărilor oamenilor în înțelegerea Pacificului.
Aceste două intrigi sunt destul de simple. Datele provin din perspectivele populației ONU pentru 2024, o sursă de date pe care am folosit-o în mai multe postări de blog înainte. Setul de date particular pe care îl dorim este „indicatorii standard” – aceștia includ migrația netă, schimbările naturale (adică nașterile minus decesele) și populația totală pentru fiecare an din 1950 până în 2050; care este ceea ce căutăm pentru topurile astăzi.
Mai întâi descărcarea și dispută de date. Destul de simplu:
# draws charts of migration and natural change impact on growth
# The source for this is UN population projections. Some details
# on net migration aren't in the PDH.stat so we get them from
# the UN website.
#
# Peter Ellis November 2025
library(tidyverse)
library(readxl)
library(scales)
#-------------Download and get ready the data---------------
df2 <- "pp24_standard.xlsx"
if(!file.exists(df2)){
unlink(df2)
download.file("https://population.un.org/wpp/assets/Excel%20Files/1_Indicator%20(Standard)/EXCEL_FILES/1_General/WPP2024_GEN_F01_DEMOGRAPHIC_INDICATORS_COMPACT.xlsx",
destfile = df2, mode = "wb")
}
un_indicators <- read_excel(df2, skip = 16)
picts <- c(
"Fiji", "New Caledonia", "Papua New Guinea", "Solomon Islands",
"Guam", "Kiribati", "Marshall Islands", "Micronesia (Fed. States of)", "Nauru",
"Vanuatu", "Northern Mariana Islands","Palau", "American Samoa", "Cook Islands",
"French Polynesia", "Niue", "Samoa", "Tokelau", "Tonga", "Tuvalu", "Wallis and Futuna Islands"
)
# check all PICTs spelled correctly and in data
stopifnot(all(picts %in% un_indicators$`Region, subregion, country or area *`))
pict_indicators <- un_indicators |>
rename(country = `Region, subregion, country or area *`) |>
filter(country %in% picts) |>
mutate(nnm = as.numeric(`Net Number of Migrants (thousands)`),
nmr = as.numeric(`Net Migration Rate (per 1,000 population)`) ,
nc = as.numeric(`Natural Change, Births minus Deaths (thousands)`),
pc = as.numeric(`Population Change (thousands)`),
pop1july = as.numeric(`Total Population, as of 1 July (thousands)`)) |>
mutate(country = gsub("States of", "States", country),
country = fct_reorder(country, abs(nmr)),
migration_direction = ifelse(nmr <0, -1, 1))
De fapt, această „dispută” de date nu este mult mai mult decât filtrarea datelor către țările și teritoriile insulare din Pacific pe care le dorim; reetichetarea unor coloane pentru ușurință în utilizare; și un pic de joc cu numele de dragul aspectului în graficele care urmează.
Iată primul grafic pe care l-am dorit. Aceasta este doar migrația netă ca linie, dar pentru a o face mai impresionantă din punct de vedere vizual, am completat spațiul dintre linie și axa orizontală net-zero și am codificat culorile care umplu cu roșu pentru negativ, albastru pentru pozitiv.
Punctul cheie de fond din acest grafic este dominația migrației nete roșii-negative pentru Pacific, de cele mai multe ori, majoritatea țărilor. Există povești interesante în episoadele albastre. Unele sunt probabil probleme de date care ar putea fi modificate ulterior, altele sunt legate de perioadele de imigrare legate de proiecte de construcții. Intrarea în povestea particulară a fiecărei țări sau teritorii aici este dincolo de scopul discursului meu sau al blogului, dar intriga este un început excelent pentru oricine dorește să se angajeze în asta.
Controlul umplerii astfel a fost puțin complicat și, după cum poate ați observat în fragmentul anterior de cod, mi-a cerut să fac o migration_direction variabilă. În fragmentul de mai jos, această variabilă este mapată la estetica de umplere a geomului panglicii.
Am experimentat modalități alternative de umplere a panglicii, inclusiv o variabilă continuă (de exemplu, albastru mai închis pentru mai pozitiv, roșu mai închis pentru mai mult negativ), dar nu au fost la fel de eficiente vizual ca contrastul unic roșu-albastru.
Iată codul pentru a desena acea diagramă:
pict_indicators |>
ggplot(aes(x = Year, y = nmr)) +
facet_wrap(~country, ncol = 7, scales = "fixed") +
geom_line(colour = "grey50", linetype = 1, linewidth = 0.4) +
geom_ribbon(aes(ymin = 0, ymax = nmr, fill = migration_direction), alpha = 0.5) +
scale_y_continuous(label = percent_format(scale = 1)) +
scale_fill_gradient2(low = "red", high = "blue") +
labs(title = "Net migration impact on Pacific island countries and territories",
subtitle = "Countries shown in sequence of least proportionately impacted to most",
x = "",
y = "Net migration as a proportion of population in residence") +
theme(legend.position = "none",
axis.text.x = element_text(size = 7, colour = "grey50"),
panel.grid.minor = element_blank())
Al doilea diagramă folosește aceleași date într-o prezentare diferită. Pentru că este puțin mai aglomerat, am ales doar șase țări sau teritorii pentru a le afișa:
Linia albastră continuă este creșterea totală a populației. Linia verde întreruptă reprezintă creșterea „naturală”, adică nașterile minus decesele. Linia roșie punctată este migrația netă la care tocmai ne uitam. Vă puteți gândi la linia roșie ca trage în jos (sau foarte ocazional, în sus) linia verde pentru a obține linia albastră continuă ca suma celor două. Sau vă puteți imagina, dacă nu ar exista deloc o linie roșie, linia verde ar fi creșterea totală a populației. Acesta a fost un punct de discuție frumos și cred că completează frumos primul grafic.
Este o poveste destul de dramatică când te gândești la linia întreruptă verde care este trasă în jos la linia albastră de migrație! Uită-te la Niue, Insulele Marshall sau Samoa (migrația extrem de importantă) în comparație cu Kiribati sau Papua Noua Guinee (nu atât de mult).
Alegerea importantă a designului este să folosiți o linie continuă pentru totalul total și linii întrerupte și punctate pentru cele două componente ale acesteia. Cred că acest lucru îl face mai ușor de urmărit, adică făcând totalul o linie solidă atrăgătoare. Câteva lucruri secundare de remarcat: un alt motiv pentru a folosi liniuțe și puncte pe lângă contrastul roșu și verde este din cauza frecvenței relativ ridicate a persoanelor daltoniene roșu-verde; și, de asemenea, mă asigur cu atenție că legenda arată creșterea naturală, populația totală, migrația netă în aceeași secvență verticală în care apar în parcele.
Iată codul pentru această diagramă simplă:
selected <- c("Niue", "Marshall Islands", "Samoa", "Kiribati", "Northern Mariana Islands", "Papua New Guinea")
pict_indicators |>
filter(country %in% selected) |>
select(country, Year, `Net migration gain/loss` = nnm, `Natural increase` = nc, `Total increase` = pc) |>
gather(variable, value, -Year, -country) |>
mutate(variable = fct_relevel(variable, "Net migration gain/loss", after = Inf)) |>
ggplot(aes(x = Year, y = value, colour = variable, linetype = variable)) +
facet_wrap(~country, ncol = 3, scales = "free_y") +
geom_hline(yintercept = 0, colour = "grey50") +
geom_line() +
scale_colour_manual(values = c("darkgreen", "blue", "red")) +
scale_linetype_manual(values = c(2,1,3)) +
labs(y = "Annual change in population (thousands)",
x = "",
colour = "", linetype = "")
Asta e tot deocamdată! Apare în postările ulterioare: diaspora, cele mai mari orașe din Pacific din lume și remitențe.
