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 .