改变对婚内生育的看法:用叠加条形图分析数据

"你认为人们结婚后应该要孩子吗?"
在过去,我们中的大多数人都会回答 "当然",但现在情况有些不同了。 结婚生育不再是理所当然的事。 选择领域我们可以从数据中看到这种变化。
在本文中,我们将使用 关于对婚内生育的态度变化的数据基于 利用 R 代码创建 堆叠条形图并探索这种变化意味着什么。让我们一起利用数据来了解我们的社会正在发生怎样的变化,并获得为未来做好准备所需的洞察力。
关于婚姻和生育率的调查数据
以下是国家统计局社会调查提供的两年来 13 岁及以上人口对 "结婚后是否应该要孩子 "这一问题的回答数据。单位为 %。
| 年份 | 完全同意 | 有点同意 | 略微相反 | 完全相反 |
|---|---|---|---|---|
| 2018 | 25.4 | 44.1 | 21.9 | 8.6 |
| 2020 | 25.5 | 42.6 | 22.1 | 9.8 |
| 2022 | 21.6 | 43.8 | 23.9 | 10.8 |
| 2024 | 23.4 | 44.9 | 22.7 | 9.0 |
改变已婚生育观念的影响

观察这些数据,您会发现几个重要的趋势。
- 完全同意的百分比降低
- 从 2018 年的 25.41 TP3T 减少到 2024 年的 23.41 TP3T。
- 这表明,围绕婚姻和生育的传统价值观正在逐渐削弱。
- 增加下拉投票
- 轻微反对和完全反对的比例都在增加。
- 值得注意的是,全反对略有上升,从 2018 年的 8.61 TP3T 上升到 2024 年的 9.01 TP3T,但一直在稳步上升。
- 保持一定的同意
- 稍微同意的比例变化不大,从 2018 年的 44.11 TP3T 到 2024 年的 44.91 TP3T。
- 这表明,许多人仍然认为自己 "需要 "生孩子,但并不坚定。
用 R 代码创建堆叠条形图
现在,让我们用上面的数据在 R 中创建一个堆叠条形图!该图可以一目了然地显示变化的明显程度。
# 加载所需的库
library(ggplot2)
library(dplyr)
# 创建数据集
data <- data.frame(
Year = c(2018, 2020, 2022, 2024)、
Strongly_Agree = c(25.4, 25.5, 21.6, 23.4)、
有点同意 = c(44.1, 42.6, 43.8, 44.9)、
有点不同意 = c(21.9,22.1,23.9,22.7)、
非常不同意 = c(8.6, 9.8, 10.8, 9.0)
)
# 将数据转换为长格式
data_long %
tidyr::pivot_longer(
cols = starts_with("Strongly_") | starts_with("Somewhat_")、
names_to = "响应"、
values_to = "百分比"
)
# 设置回复顺序
data_long$Response <- factor(
data_long$Response、
levels = c("Strongly_Agree", "Somewhat_Agree", "Somewhat_Disagree", "Strongly_Disagree")
)
# 创建堆叠条形图
ggplot(data_long, aes(x = factor(Year), y = Percentage, fill = Response)) +
geom_bar(stat = "身份", position = position_stack(reverse = TRUE), color = "black") +
geom_text(aes(label = round(Percentage, 1))、
position = position_stack(vjust = 0.5, reverse = TRUE), size = 3.5, color = "white") +
scale_fill_manual(
values = c(
"Strongly_Agree" = "#74C476"、
"有点同意" = "#31A354"、
"有点不同意" = "#FD8D3C"、
"强烈不同意"="#E31A1C")。
),
labels = c("Strongly Agree", "Somewhat Agree", "Somewhat Disagree", "Strongly Disagree")
) + +
labs(
title = "婚后对生孩子看法的变化"、
x = "年份"、
y = "百分比(%)"、
fill = "响应".
) + Β
theme_minimal() +
主题(
plot.title = element_text(hjust = 0.5, size = 16, face = "bold")、
axis.title = element_text(size = 12)、
axis.text = element_text(size = 10)、
legend.title = element_text(size = 12)、
图例文本 = element_text(size = 10)
) +
coord_flip()

总结
数据可以帮助我们了解变化,做出更好的决策。不仅仅是数字,人们对婚姻和生育态度的转变也清楚地表明了我们的社会正在发生怎样的变化,对于政策制定者和个人来说,了解这种转变都是非常重要的,尤其是我们看待婚姻和生育的方式已经与过去大不相同。
堆叠条形图是直观解读复杂数据的好方法,利用本文中的 R 代码,您可以直观地分析自己的数据。它将帮助您了解问题的本质,并有望找到新的解决方案。
虽然婚育是个人的选择,但很明显,它在迈向可持续发展社会的过程中发挥着重要作用。无论您从这些数据中得到什么启示,我们都希望它能成为建设更美好未来的一粒小小的种子。
另外,婚后生育观念的变化在总和生育率中是如何体现的? 总和生育率的定义和计算:用 R 进行趋势可视化分析 看看这篇文章。
#代码明细
1. 加载程序库
library(ggplot2) library(dplyr)
- ggplot2:强大的数据可视化图形库
- dplyr:提供高效的数据操作工具
2. 创建数据集
data <- data.frame( Year = c(2018, 2020, 2022, 2024)、 Strongly_Agree = c(25.4, 25.5, 21.6, 23.4)、 有点同意 = c(44.1, 42.6, 43.8, 44.9)、 有点不同意 = c(21.9,22.1,23.9,22.7)、 非常不同意 = c(8.6, 9.8, 10.8, 9.0) )
- 按年份创建回复率数据框
- 每列代表按年份和答复类型分列的百分比
3. 转换数据
data_long % tidyr::pivot_longer( cols = starts_with("Strongly_") | starts_with("Somewhat_")、 names_to = "响应"、 values_to = "百分比" )
- 使用 tidyr::pivot_longer() 函数将数据转换为长格式
- 将以 "强烈_"或 "有点_"开头的列转换为 "回复 "列
- 将这些值移至 "百分比 "栏
4. 设置响应顺序
data_long$Response <- factor( data_long$Response、 levels = c("Strongly_Agree", "Somewhat_Agree", "Somewhat_Disagree", "Strongly_Disagree") )
- 将 "回复 "列转换为因子,以便按特定顺序排序
- 这决定了图表中柱形的顺序
5. 绘制图表
ggplot(data_long, aes(x = factor(Year), y = Percentage, fill = Response)) + geom_bar(stat = "身份", position = position_stack(reverse = TRUE), color = "black") + geom_text(aes(label = round(Percentage, 1))、 position = position_stack(vjust = 0.5, reverse = TRUE), size = 3.5, color = "white") +
- 使用 ggplot() 创建基本图形对象
- 使用 geom_bar() 创建条形图,使用 position_stack() 堆叠条形图
- 使用 geom_text() 在每个条形图内显示百分比值
6. 设置颜色和标签
scale_fill_manual( values = c( "非常同意" = "#74C476"、 "有点同意" = "#31A354"、 "有点不同意" = "#FD8D3C"、 "强烈不同意"="#E31A1C")。 ), labels = c("Strongly Agree", "Somewhat Agree", "Somewhat Disagree", "Strongly Disagree") ) + +
- 使用 scale_fill_manual() 为每种响应类型指定颜色
- 使用标签参数为图例设置标签文本
7. 设置图表标题和坐标轴标签
labs( title = "婚后对生育子女看法的变化"、 x = "年份"、 y = "百分比(%)"、 fill = "响应". ) + +
- 使用 labs() 函数设置图表标题、X 轴标签、Y 轴标签和图例标题
8.主题和风格设置
theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 16, face = "bold")、 axis.title = element_text(size = 12)、 axis.text = element_text(size = 10)、 legend.title = element_text(size = 12)、 图例文本 = element_text(size = 10) ) +
- 使用 theme_minimal() 应用默认的最小化主题
- 使用 theme() 函数对标题、轴标签、图例等的样式进行微调。
9. 翻转轴
coord_flip()
- 使用 coord_flip() 翻转 x 轴和 y 轴,转换为水平条形图




