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 .

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir