首页 > 解决方案 > 使用ggplot2在直方图上的密度

问题描述

我有“长”格式数据框,其中包含两列:第一个 col - 值,第二个 col- 性别 [Male - 1/Female - 2]。我写了一些代码来制作整个数据集的直方图(下面的代码)。

ggplot(kz6, aes(x = values)) + 
  geom_histogram()

但是,我还想在直方图上添加一个密度以强调性别之间的差异,即我想组合 3 个图:整个数据集的直方图和每个性别的 2 个密度图。我尝试使用一些示例(),但它仍然不起作用。仅密度代码有效,而 hist + density 的组合则无效。

density <- ggplot(kz6, aes(x = x, fill = factor(sex))) + 
  geom_density()

both <- ggplot(kz6, aes(x = values)) + 
  geom_histogram() +
  geom_density()

both_2 <- ggplot(kz6, aes(x = values)) + 
  geom_histogram() +
  geom_density(aes(x = kz6[kz6$sex == 1,]))

PS一些例子包含y=..density..什么意思?如何解释这个?

标签: rggplot2

解决方案


要绘制直方图并叠加由分类变量定义的两个密度,请在调用geom_density、likegroup或时使用适当的美学colour

ggplot(kz6, aes(x = values)) +
  geom_histogram(aes(y = ..density..), bins = 20) +
  geom_density(aes(group = sex, colour = sex), adjust = 2)

在此处输入图像描述

数据创建代码。

我将从内置数据集创建一个测试数据集iris

kz6 <- iris[iris$Species != "virginica", 4:5]
kz6$sex <- "M"
kz6$sex[kz6$Species == "versicolor"] <- "F"
kz6$Species <- NULL
names(kz6)[1] <- "values"
head(kz6)

推荐阅读