Как создать пирамиду населения в 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 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() 
Пирамида населения с использованием ggplot2

Добавление заголовков и меток

Мы можем добавить как заголовки, так и метки осей в пирамиду населения, используя аргумент 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() 
Пирамида населения в R с использованием ggplot2

Изменение цветов

Мы можем изменить два цвета, используемые для представления пола, с помощью аргумента 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() 
Пирамида населения в R с пользовательскими цветами

Многочисленные пирамиды населения

Также можно построить несколько демографических пирамид вместе, используя аргумент 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 
Пирамиды населения в R с facet_wrap()

Изменение темы

Наконец, мы можем изменить тему диаграмм. Например, в следующем коде используется 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))
Классическая тема в R

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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.