كيفية إنشاء الهرم السكاني في r
الهرم السكاني هو رسم بياني يوضح العمر والتوزيع الجنسي لمجموعة سكانية معينة. يعد هذا مخططًا مفيدًا لفهم تكوين السكان بالإضافة إلى اتجاه النمو السكاني الحالي بسهولة.
إذا كان للهرم السكاني شكل مستطيل، فهذا يشير إلى أن عدد السكان ينمو بمعدل أبطأ؛ يتم استبدال الأجيال الأقدم بأجيال جديدة بنفس الحجم تقريبًا.
إذا كان الهرم السكاني على شكل هرم، فهذا يشير إلى أن عدد السكان ينمو بمعدل أسرع؛ الأجيال الأكبر سنا تنتج أجيالا جديدة أكبر.
في الرسم البياني، يظهر الجنس على الجانبين الأيسر والأيمن، ويظهر العمر على المحور ص، والنسبة المئوية أو عدد السكان على المحور س.
يشرح هذا البرنامج التعليمي كيفية إنشاء الهرم السكاني في R.
إنشاء الهرم السكاني في R
لنفترض أن لدينا مجموعة البيانات التالية التي توضح النسبة المئوية لتكوين السكان بناءً على العمر (من 0 إلى 100 عام) والجنس (M = “ذكر”، F = “أنثى”):
#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
يمكننا إنشاء هرم سكاني أساسي لمجموعة البيانات هذه باستخدام مكتبة ggplot2 :
#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()
إضافة العناوين والعلامات
يمكننا إضافة كل من العناوين وتسميات المحاور إلى الهرم السكاني باستخدام الوسيطة labs() :
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()
تغيير الألوان
يمكننا تغيير اللونين المستخدمين لتمثيل الأجناس باستخدام الوسيطة scale_color_manual() :
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()
أهرامات عمرية متعددة
من الممكن أيضًا رسم أهرامات سكانية متعددة معًا باستخدام الوسيطة facet_wrap() . على سبيل المثال، لنفترض أن لدينا بيانات سكانية للبلدان أ، ب، ج. يوضح الكود التالي كيفية إنشاء هرم سكاني لكل بلد:
#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
غير الخلفية
وأخيرا، يمكننا تغيير موضوع الرسومات. على سبيل المثال، تستخدم التعليمة البرمجية التالية theme_classic() لجعل الرسومات تبدو أكثر بساطة:
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))
أو يمكنك استخدام سمات gg المخصصة. للحصول على قائمة كاملة بموضوعات gg، راجع صفحة الوثائق .