วิธีสร้างปิรามิดประชากรใน r
ปิระมิดประชากร คือกราฟที่แสดงการกระจายอายุและเพศของประชากรที่กำหนด นี่เป็นแผนภูมิที่มีประโยชน์ในการทำความเข้าใจองค์ประกอบของประชากรและแนวโน้มการเติบโตของประชากรในปัจจุบันได้อย่างง่ายดาย
หากปิรามิดประชากรมีรูปร่างเป็นรูปสี่เหลี่ยมผืนผ้า แสดงว่าประชากรมีการเติบโตในอัตราที่ช้าลง คนรุ่นเก่าจะถูกแทนที่ด้วยคนรุ่นใหม่ที่มีขนาดใกล้เคียงกัน
หากปิรามิดประชากรมีรูปร่างเหมือนปิรามิด แสดงว่าประชากรมีการเติบโตในอัตราที่เร็วกว่า คนรุ่นเก่าผลิตคนรุ่นใหม่ที่ใหญ่กว่า
ในกราฟ เพศจะแสดงทางด้านซ้ายและด้านขวา อายุจะแสดงบนแกน y และเปอร์เซ็นต์หรือจำนวนประชากรจะแสดงบนแกน x
บทช่วยสอนนี้จะอธิบายวิธีสร้างปิรามิดประชากรใน 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() ตัวอย่างเช่น สมมติว่าเรามีข้อมูลประชากรสำหรับประเทศ A, B และ C รหัสต่อไปนี้แสดงวิธีสร้างปิรามิดประชากรสำหรับแต่ละประเทศ:
#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))
หรือคุณสามารถใช้ ggthemes ที่กำหนดเองได้ หากต้องการดูรายการ ggthemes ทั้งหมด โปรดดูที่ หน้า เอกสารประกอบ