首页 > 解决方案 > R中Y轴上有两个变量的频率分布直方图

问题描述

我得到了这个数据框,它同时是一个频率分布,并被赋予了绘制整个人口年龄分布的直方图的任务,并在图中添加了男性和女性的个人资料。我需要实现的是像这样的直方图,例如:男性和女性轮廓重叠的两变量频率条形图,但在 x 轴上有 AgeClasses。这是我的代码:

AgeClasses <- c('0-9','10-19','20-29','30-39','40-49', '50-59', '60-69','70-79','80-89', '90-99')
Frequencies <- c(1000,900,800,700,600,500,400,300,200,100)
SexRatioFM <- c(0.4,0.42,0.44,0.48,0.52,0.54,0.55,0.58,0.6,0.65)
df$Females <- c(SexRatioFM*Frequencies)
df$Males <- c(Frequencies-Females)

library(ggplot2)


ggplot(df) +
    geom_bar(mapping = aes(x = AgeClasses, y = Females), stat = "identity")

我非常感谢您在解决此任务方面的帮助。

标签: rhistogramfrequency-distribution

解决方案


这种类型的图是堆积条形图。要使用 ggplot2 最轻松地生成它,您需要将数据转换为长格式,以便一列包含男性和女性的所有计数,另一列包含带有标签“男性”和“女性”的因子变量。您可以使用以下方法执行此操作tidyr::pivot_longer

library(ggplot2)
library(tidyr)

pivot_longer(df, cols = c(Females, Males)) %>%
  ggplot() +
  geom_col(mapping = aes(x = AgeClasses, y = value, fill = name)) +
  labs(x = "Age", y = "Count", fill = "Gender")

在此处输入图像描述


推荐阅读