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()引数を使用して、性別を表すために使用される 2 つの色を変更できます。

 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))

または、カスタム gg テーマを使用することもできます。 ggtheme の完全なリストについては、 ドキュメント ページを参照してください

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です