Пирамида населения — это график, показывающий распределение населения по возрасту и полу. Это полезная диаграмма, позволяющая легко понять состав населения, а также текущую тенденцию роста населения.
Если пирамида населения имеет прямоугольную форму, это указывает на то, что население растет более медленными темпами; старые поколения сменяются новыми примерно такого же размера.
Если пирамида населения имеет форму пирамиды, это указывает на то, что население растет более быстрыми темпами; старшие поколения производят более крупные новые поколения.
На диаграмме пол показан слева и справа, возраст показан на оси 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 population variable
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 1 M 2.424362
#2 2 M 1.794957
#3 3 M 1.589594
#4 4 M 1.556063
#5 5 M 1.053662
#6 6 M 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)) +
coord_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") +
coord_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_colour_manual(values = c("pink", "steelblue"),
aesthetics = c("colour", "fill")) +
coord_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 population variable
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 M A 11328
#2 2 M A 8387
#3 3 M A 7427
#4 4 M A 7271
#5 5 M A 4923
#6 6 M A 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") +
coord_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") +
coord_flip() +
facet_wrap(~ country) +
theme_classic() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))

Или вы можете использовать пользовательские ggthemes. Полный список ggthemes можно найти на странице документации .