R语言 如何创建一个人口金字塔
在这篇文章中,我们将讨论如何在R编程语言中创建一个人口金字塔。
人口金字塔也被称为年龄-性别金字塔。它帮助我们直观地看到人口在年龄组和性别上的分布。它通常呈现出金字塔的形状。在人口金字塔中,男性通常被描述在左边,女性在右边。这种数据可视化的方法可以用来根据男性和女性居民的数量或百分比来可视化某一特定人口的年龄。
为了在R语言中创建一个人口金字塔,我们使用ggplot2包的geom_bar()函数。ggplot2是一个用于声明性地创建图形的系统,基于 “图形的语法”。geom_bar()函数用于绘制条形图,它使条形图的高度与每组的病例数成正比。
在R中创建人口金字塔的基础
为了创建一个人口金字塔,我们使用coord_flip()函数和geom_bar()函数来创建一个水平条形图,然后我们使用mutate函数使男性人口的值为负数,从而在左边创建男性人口条形图,在右边创建女性人口条形图,这样就得到了所需的人口金字塔。
语法 。
ggplot( df, aes(x = age, y = population))+ geom_bar(stat = “identity”) + coord_flip()
参数 。
- df: 决定了包含人口数据的数据框架。
- 性别、年龄和人口: 决定df数据框架的列。
例子 。
这里,是一个基本的人口金字塔。在这个例子中使用的CSV文件可以在这里下载。
# load sample data
sample_data <- read.csv("Population.CSV")
# load library ggplot2 and dplyr
library(ggplot2)
library(dplyr)
# change male population to negative
sample_data %>%mutate(
population = ifelse(gender=="M", population*(-1),
population*1))%>%
ggplot(aes(x = age,y = population)) +
geom_bar(stat = "identity") +
coord_flip()
输出 。
R中的颜色定制人口金字塔
为了定制男性和女性条形图的颜色,我们使用ggplot()函数的填充美学属性。我们可以根据这个变量来传递我们想要的颜色,也可以传递需要放的确切颜色。我们甚至可以使用scale_fill_brewer()函数来将颜色设置为预定义的调色板。
语法。
ggplot( df, aes(x, y, fill) )
参数。
- fill: 确定要给条形图上色的变量。
例子 。
在这个例子中,我们用7号调色板给图表上了色。
# load sample data
sample_data <- read.csv("Population.CSV")
# load library ggplot2 and dplyr
library(ggplot2)
library(dplyr)
# change male population to negative
sample_data %>%mutate(
population = ifelse(gender=="M", population*(-1),
population*1))%>%
ggplot(aes(x = age,y = population, fill=gender)) +
geom_bar(stat = "identity") +
coord_flip()+
scale_fill_brewer(type = "seq",palette = 7)
输出 。
R中的标签定制人口金字塔
为了自定义绘图的标签,我们使用labs()函数的标题、x和y参数。这里,title、x和y分别决定了绘图的标题、x轴的标签和y轴的标签。
语法。
ggplot( df, aes(x, y) )+ labs( title, x, y)
参数。
- title: 决定了绘图的标题。
- x和y: 分别决定x轴和y轴的标签。
例子 。
这里,是一个带有自定义颜色和标签的人口金字塔。这个例子中使用的CSV文件可以在这里下载。
# load sample data
sample_data <- read.csv("Population.CSV")
# load library ggplot2 and dplyr
library(ggplot2)
library(dplyr)
# change male population to negative
sample_data %>%mutate(
population = ifelse(gender=="M", population*(-1),
population*1))%>%
ggplot(aes(x = age,y = population, fill=gender)) +
geom_bar(stat = "identity") +
coord_flip()+
labs(title = "Title of plot", x = "Age",
y = "Population(in millions)")
输出 。
在R中自定义人口金字塔的坐标轴
由于在上面的例子中,人口金字塔不在中心位置,因为女性的人口较多。为了解决这些情况,我们可以使用scale_x/y_continuous()函数固定轴的比例。我们还可以用这个函数来设置轴的断点。为了设置轴的断点,我们使用 scale_x/y_continuous() 函数的断点参数。
语法。
scale_x/y_continuous( limits, breaks)
参数。
- limits: 决定x或y轴的极限。
- breaks: 决定x轴或y轴的断点。
例子 。
在这个例子中,我们设置了y轴的限制,以使绘图更加统一。
# load sample data
sample_data <- read.csv("Population.CSV")
# load library ggplot2 and dplyr
library(ggplot2)
library(dplyr)
# change male population to negative
sample_data %>%mutate(
population = ifelse(gender=="M", population*(-1),
population*1))%>%
ggplot(aes(x = age,y = population, fill=gender)) +
geom_bar(stat = "identity") +
coord_flip()+
scale_y_continuous(limits = c(-4,4),
breaks = seq(-4, 4, by = 2))+
labs(title = "Title of plot", x = "Age",
y = "Population(in millions)")
输出 。