Hoe maak je een bevolkingspiramide in r


Een bevolkingspiramide is een grafiek die de leeftijds- en geslachtsverdeling van een bepaalde bevolking weergeeft. Dit is een handig diagram om gemakkelijk de samenstelling van een bevolking te begrijpen, evenals de huidige trend van de bevolkingsgroei.

Als een bevolkingspiramide een rechthoekige vorm heeft, geeft dit aan dat een bevolking langzamer groeit; oudere generaties worden vervangen door nieuwe generaties van ongeveer dezelfde omvang.

Als een bevolkingspiramide de vorm heeft van een piramide, geeft dit aan dat een bevolking sneller groeit; oudere generaties brengen nieuwe, grotere generaties voort.

In de grafiek wordt het geslacht aan de linker- en rechterkant weergegeven, de leeftijd op de y-as en het percentage of de omvang van de bevolking op de x-as.

In deze tutorial wordt uitgelegd hoe je een bevolkingspiramide in R maakt.

Creëer een bevolkingspiramide in R

Stel dat we de volgende gegevensset hebben die de procentuele samenstelling van een bevolking weergeeft op basis van leeftijd (0 tot 100 jaar) en geslacht (M = „Man“, F = „Vrouw“):

 #make this example reproducible
set.seed(1)

#create data frame
data <- data.frame(age = rep(1:100, 2), gender = rep(c("M", "F"), each = 100))

#add variable population
data$population <- 1/sqrt(data$age) * runif(200, 10000, 15000)

#convert population variable to percentage
data$population <- data$population / sum(data$population) * 100

#view first six rows of dataset
head(data)

# age gender population
#1 1M 2.424362
#2 2M 1.794957
#3 3M 1.589594
#4 4M 1.556063
#5 5M 1.053662
#6 6M 1.266231

We kunnen voor deze dataset een basispopulatiepiramide maken met behulp van de ggplot2- bibliotheek:

 #load ggplot2
library(ggplot2)

#create population pyramid
ggplot(data, aes(x = age, fill = gender,
                 y = ifelse(test = gender == "M",
                            yes = -population, no = population))) + 
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = abs, limits = max(data$population) * c(-1,1)) +
  coordinate_flip()

Titels en tags toevoegen

We kunnen zowel titels als aslabels aan de populatiepiramide toevoegen met behulp van het labs() argument:

 ggplot(data, aes(x = age, fill = gender,
                 y = ifelse(test = gender == "M",
                            yes = -population, no = population))) + 
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = abs, limits = max(data$population) * c(-1,1)) +
  labs(title = "Population Pyramid", x = "Age", y = "Percent of population") +
  coordinate_flip()

Verander kleuren

We kunnen de twee kleuren die worden gebruikt om geslachten weer te geven, wijzigen met behulp van het scale_color_manual() argument:

 ggplot(data, aes(x = age, fill = gender,
                 y = ifelse(test = gender == "M",
                            yes = -population, no = population))) + 
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = abs, limits = max(data$population) * c(-1,1)) +
  labs(title = "Population Pyramid", x = "Age", y = "Percent of population") +
  scale_color_manual(values = c("pink", "steelblue"),
aesthetics = c("color", "fill")) +
  coordinate_flip()

Meerdere leeftijdspiramides

Het is ook mogelijk om meerdere bevolkingspiramides samen te plotten met behulp van het facet_wrap() argument. Stel dat we bijvoorbeeld bevolkingsgegevens hebben voor landen A, B en C. De volgende code illustreert hoe je voor elk land een bevolkingspiramide kunt maken:

 #make this example reproducible
set.seed(1)

#create data frame
data_multiple <- data.frame(age = rep(1:100, 6),
                   gender = rep(c("M", "F"), each = 300),
                   country = rep(c("A", "B", "C"), each = 100, times = 2))

#add variable population
data_multiple$population <- round(1/sqrt(data_multiple$age)*runif(200, 10000, 15000), 0)

#view first six rows of dataset
head(data_multiple)

# age gender country population
#1 1 MA 11328
#2 2 MA 8387
#3 3 MA 7427
#4 4 MA 7271
#5 5 MA 4923
#6 6 MA 5916

#create one population pyramid per country
ggplot(data_multiple, aes(x = age, fill = gender,
                          y = ifelse(test = gender == "M",
                                     yes = -population, no = population))) + 
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = abs, limits = max(data_multiple$population) * c(-1,1)) +
  labs(y = "Population Amount") + 
  coordinate_flip() +
  facet_wrap(~country) +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) #rotate x-axis labels

Thema veranderen

Ten slotte kunnen we het thema van de afbeeldingen wijzigen. De volgende code gebruikt bijvoorbeeld thema_classic() om afbeeldingen er minimalistischer uit te laten zien:

 ggplot(data_multiple, aes(x = age, fill = gender,
                          y = ifelse(test = gender == "M",
                                     yes = -population, no = population))) + 
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = abs, limits = max(data_multiple$population) * c(-1,1)) +
  labs(y = "Population Amount") + 
  coordinate_flip() +
  facet_wrap(~country) +
theme_classic() + 
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Of u kunt aangepaste gg-thema’s gebruiken. Zie de documentatiepagina voor een volledige lijst met ggthemes .

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert