r - 使用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..
什么意思?如何解释这个?
解决方案
要绘制直方图并叠加由分类变量定义的两个密度,请在调用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)
推荐阅读
- ios - 'hitTest()' 在 iOS 14.0 中被弃用
- android - ZoomUS - Android 崩溃 - ZoomSDK
- c# - Bool 返回 true,而 Excel 单元格值之一与使用 C# 的其他单元格值不匹配
- javascript - 高效检测单页应用中的 DOM 变化
- css - 在我的样式表中应用一些 css 形成一些其他现有样式
- sql - SQL 从一个条目中选择两列
- java - 生成 6 位 UNIQUE 数字并确保它与 Java 不重复
- azure - 我可以从 PowerShell 为 publicClient 或 spa 设置 redirectUris 吗?
- python - np.insert 问题。我无法插入所有字符串(python3.7;numpy1.19.2)
- bash - 如何从顺序值中获取计数