R'de nüfus piramidi nasıl oluşturulur
Nüfus piramidi, belirli bir nüfusun yaş ve cinsiyet dağılımını gösteren bir grafiktir. Bu, bir nüfusun bileşiminin yanı sıra mevcut nüfus artış eğilimini de kolayca anlamak için yararlı bir grafiktir.
Nüfus piramidinin dikdörtgen bir şekle sahip olması, nüfusun daha yavaş bir oranda arttığını gösterir; eski nesillerin yerini yaklaşık olarak aynı büyüklükteki yeni nesiller alır.
Nüfus piramidinin piramit şeklinde olması, nüfusun daha hızlı büyüdüğünü gösterir; eski nesiller yeni, daha büyük nesiller üretir.
Grafikte sol ve sağ tarafta cinsiyet, y ekseninde yaş, x ekseninde ise nüfus yüzdesi veya miktarı gösterilmektedir.
Bu eğitimde R’de bir nüfus piramidinin nasıl oluşturulacağı açıklanmaktadır.
R’de bir nüfus piramidi oluşturun
Bir nüfusun yaşa (0 ila 100 yıl) ve cinsiyete (M = “Erkek”, F = “Kadın”) dayalı yüzde bileşimini gösteren aşağıdaki veri setine sahip olduğumuzu varsayalım:
#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
Bu veri seti için ggplot2 kütüphanesini kullanarak temel bir nüfus piramidi oluşturabiliriz:
#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()
Başlık ve Etiket Ekleme
Labs() argümanını kullanarak nüfus piramidine hem başlıkları hem de eksen etiketlerini ekleyebiliriz:
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()
Renkleri değiştir
Scale_color_manual() argümanını kullanarak cinsiyetleri temsil etmek için kullanılan iki rengi değiştirebiliriz:
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()
Çoklu yaş piramitleri
facet_wrap() argümanını kullanarak birden fazla nüfus piramidini birlikte çizmek de mümkündür. Örneğin, A, B ve C ülkeleri için nüfus verilerimiz olduğunu varsayalım. Aşağıdaki kod, her ülke için nüfus piramidinin nasıl oluşturulacağını göstermektedir:
#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
Temayı değiştir
Son olarak grafiklerin temasını değiştirebiliriz. Örneğin aşağıdaki kod, grafiklerin daha minimalist görünmesini sağlamak için theme_classic() işlevini kullanır:
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))
Veya özel gg temalarını kullanabilirsiniz. Gg temalarının tam listesi için dokümantasyon sayfasına bakın .