r - 使用 ggridges 在山脊线图中绘制正态分布
问题描述
我有点不好意思问这个问题,但我已经花了我工作日的大部分时间试图找到解决方案,但是我在这里......
我的目标是几个正态分布的简单脊线图,这些正态分布是根据我的数据中的给定平均值和 SD 计算得出的,就像在这个例子中一样:
case_number caseMean caseSD
case1 0 1
case2 1 2
case3 3 3
我发现的所有示例都在进行一系列测量,例如内布拉斯加州林肯的温度 示例:山脊线图示例 https://cran.r-project.org/web/packages/ggridges/vignettes/ Introduction.html,我无法让它们工作。
至于我在 R 方面的经验,在数据分析方面我并不是一个完全的白痴,但我渴望学习适当的可视化,但不幸的是,我需要一个解决问题的方法。
非常感谢您的帮助!
解决方案
编辑——添加了精确的理论答案。
这是一种dnorm
用于构建符合这些规范的精确正态曲线的方法:
library(tidyverse); library(ggridges)
n = 100
df3 <- df %>%
mutate(low = caseMean - 3 * caseSD, high = caseMean + 3 * caseSD) %>%
uncount(n, .id = "row") %>%
mutate(x = (1 - row/n) * low + row/n * high,
norm = dnorm(x, caseMean, caseSD))
ggplot(df3, aes(x, case_number, height = norm)) +
geom_ridgeline(scale = 3)
与 Sada93 的回答类似,使用 dplyr 和 tidyr:
library(tidyverse); library(ggridges)
n = 50000
df2 <- df %>%
uncount(n) %>%
mutate(value = rnorm(n(), caseMean, caseSD))
ggplot(df2, aes(x = value, y = case_number)) + geom_density_ridges()
样本数据:
df <- read.table(
header = T,
stringsAsFactors = F,
text = "case_number caseMean caseSD
case1 0 1
case2 1 2
case3 3 3")
推荐阅读
- cypress - 赛普拉斯冻结(您的测试正在加载)
- continuous-integration - 与 Talend ESB Open Studio 持续集成
- android - 将 recyclerview 选择与分页 3 一起使用
- javascript - 如何在谷歌驱动器的特定文件夹中上传?
- python - 使用 Python 删除字符串中连续出现的元音
- android - 如何根据设备的暗模式选择设置主题?
- wordpress - 块模式中的 Wordpress Gutenberg 博客
- c# - 将站点移动到新服务器后,现在将 Gridview 导出为 CSV,包括父页面 html 内容
- ios - 为什么 numberOfRowsInComponent 函数运行了这么多次?
- c++ - Oracle 中 DBMS_ALERT 的 ODBC 等效项