R:向 ggplot2 中的分组直方图添加正态拟合

2024-01-10

我正在寻找最优雅的方法来将正态分布拟合叠加到分组直方图中ggplot2。我知道这个问题之前已经被问过很多次了,但是没有一个建议的选项,比如this one https://stackoverflow.com/questions/7182556/how-to-add-gaussian-curve-to-histogram-created-with-qplot or this one https://stackoverflow.com/questions/1376967/using-stat-function-and-facet-wrap-together-in-ggplot2-in-r我觉得非常优雅,至少不是,除非stat_function可以对数据的每个特定部分进行处理。

我遇到的一种将正态分布拟合叠加到非分组直方图上的相对优雅的方法是使用geom_smooth and method="nls"(除了它不是自启动函数并且必须指定起始值这一事实之外):

library(ggplot2)
myhist = data.frame(size = 10:27, counts = c(1L, 3L, 5L, 6L, 9L, 14L, 13L, 23L, 31L, 40L, 42L, 22L, 14L, 7L, 4L, 2L, 2L, 1L) )
ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + 
     geom_smooth(method="nls", formula = y ~ N * dnorm(x, m, s), se=F, 
                 start=list(m=20, s=5, N=300)) 

我想知道这种方法是否也可以用于将正态分布拟合添加到分组直方图,如

library(devtools)
install_github("tomwenseleers/easyGgplot2",type="source")
library("easyGgplot2") # load weight data
ggplot(weight,aes(x = weight)) + 
+     geom_histogram(aes(y = ..count.., colour=sex, fill=sex),alpha=0.5,position="identity")

我还想知道是否有任何包可以定义+ stat_distrfit() or + stat_normfit() for ggplot2有没有机会(有分组的可能性)? (我真的找不到任何东西,但这似乎是一个很常见的任务,所以我只是想知道)

我希望代码尽可能短的原因是这是一个课程,并且我想让事情尽可能简单......

PS geom_density不适合我的目标,我还想绘制计数/频率而不是密度。我还想将它们放在同一个面板中,并避免使用facet_wrap


像这样?

## simulate your dataset - could not get easyGplot2 to load....
set.seed(1)     # for reproducible example
weight <- data.frame(sex=c("Female","Male"), weight=rnorm(1000,mean=c(65,67),sd=1))

library(ggplot2)
library(MASS)       # for fitdistr(...)
get.params <- function(z) with(fitdistr(z,"normal"),estimate[1:2])
df <- aggregate(weight~sex, weight, get.params)
df <- data.frame(sex=df[,1],df[,2])
x  <- with(weight, seq(min(weight),max(weight),len=100))
gg <- data.frame(weight=rep(x,nrow(df)),df)
gg$y <- with(gg,dnorm(x,mean,sd))
gg$y <- gg$y * aggregate(weight~sex, weight,length)$weight * diff(range(weight$weight))/30

ggplot(weight,aes(x = weight, colour=sex)) + 
  geom_histogram(aes(y = ..count.., fill=sex), alpha=0.5,position="identity") +
  geom_line(data=gg, aes(y=y))  

我想“优雅”是情人眼里出西施。使用时出现的问题stat_function(...)那是args=...无法使用列表进行映射aes(...),正如评论中的帖子所解释的那样。所以你必须创建一个辅助data.frame(gg在此示例中)具有拟合分布的 x 和 y 值,并使用geom_line(...).

上面的代码使用fitdistr(...) in the MASS包来计算数据的平均值和标准差的最大似然估计,根据正态性假设按性别分组(如果有意义的话,您可以使用不同的分布)。然后,它通过将范围划分来创建 x 轴weight分成 100 个增量,并计算dnorm(x,...)以获得适当的均值和标准差。由于结果是密度,我们必须使用以下方法进行调整:

gg$y <- gg$y * aggregate(weight~sex, weight,length)$weight * diff(range(weight$weight))/30

因为您想将其映射到计数数据。请注意,这假设您使用 geom_histogram 中的默认分箱(它将 x 中的范围划分为 30 个相等的增量)。最后,我们添加调用geom_line(...) using gg作为特定于图层的数据集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:向 ggplot2 中的分组直方图添加正态拟合 的相关文章

  • RQuantLib 包不适用于 R 3.5.0

    有没有其他人尝试加载 R 3 5 0 的 RQuantLib 包 我尝试过 以前有效 install packages drat dependencies TRUE drat addRepo ghrr install packages RQ
  • 如何为 nls 函数找到良好的起始值?

    我不明白为什么我不能对这些数据使用 nls 函数 我尝试过很多不同的起始值 但总是出现相同的错误 这是我一直在做的事情 expFct2 function x a b c a 1 exp x b c vec x lt c 77 87 87 7
  • R 中数据帧的条件求和

    我正在努力将在 Excel 中进行的分析迁移到 R 因为我的数据集已达到 Excel 的限制 在 Excel 中 我有一个工作表 状态 它执行 sumifs 函数 对另一个工作表 成员 中 状态 中具有相同状态 周组合的值求和 我想在 R
  • 根据R中的特定行值将数据帧拆分为多个数据帧

    我需要根据数据帧中重复出现的标题行将数据帧拆分为 17 872 个数据帧 我需要将新创建的数据框存储在列表中 我的数据框看起来像 0 1 2 32 Alert Type Response 33 w1 x1 y1
  • 列值的切换功能

    我有一个缩写变量 名称错误地分散在整个列表中 请参阅下面的示例结构 ID lt c SPW SM DLS SJ joe schmoe CEJ teddy roos GVF MJC LH sally fields Full names sho
  • 将 dplyr 中的starts_with与部分列名称的向量一起使用

    我想使用 dplyr 选择与字符串向量匹配的某些列 one lt seq 1 10 two lt rnorm 10 three lt runif 10 1 2 four lt 10 1 df lt data frame one two th
  • R 中自定义函数的等高线图

    我正在使用一些自定义函数 我需要根据参数的多个值为它们绘制轮廓 这是一个示例函数 我需要画这样的等高线图 任何想法 Thanks 首先你构造一个函数 fourvar它将这四个参数作为参数 在这种情况下 您可以使用 3 个变量来完成此操作 其
  • 计算带状矩阵的 colCumsums 的更快替代方案

    我是 R 和 stats 的新手 在我当前工作的领域中 我需要以独特的方式计算累积列总和 最初提供宽度为 b 行数为 n 的方带矩阵 例如 n 8 且 b 3 0 1 2 7 0 0 0 0 0 0 3 6 7 0 0 0 0 0 0 3
  • 在 R 的 stargazer 表中设置注释格式

    我在用stargazer包来生成 回归输出 表 一切都在奇迹般地进行 直到我开始编辑笔记 First 换行很难 但是 Bryansuggests https stackoverflow com questions 21720264 star
  • R 中的金字塔图

    对于示例数据集 我按国家 地区创建了一个金字塔图 显示人口中男性和女性超重的水平 library plotrix xy males overweight lt c 23 2 33 5 43 6 33 6 43 5 43 5 43 9 33
  • R:几个单独图的重新排序因子水平

    我正在尝试从同一个 data frame 创建多个单独的图 每个图的 y 轴上的因子水平顺序不同 每个图都应该对 y 上的因子水平进行递减排序 我知道这可以为每个图手动完成 但我正在寻找一种更有效和更优雅的方法 因为我需要创建相当多的图 这
  • 在 Microsoft Windows 上安装 RQuantLib

    我需要安装R包RQuantLib在 Microsoft Windows 计算机上 这个包没有二进制文件 所以我下载了 tar 源 我打开它 它包含 QuantLib C 库 所以我需要编译这个包 我不想安装 Visual Studio 我使
  • 无法将 bigrquery 与标准 sql 一起使用

    我正在 R ipython 笔记本 相对 R 新手 中工作 并尝试使用 bigrquery 从 Google Big Query 中提取数据 我被告知这应该很简单 但使用标准 sql 提取不起作用 这是我的代码 require bigrqu
  • 错误:列索引必须最多为 1,如果... heatmap.2

    我在 heatmap 2 中收到错误 我在这里发现了类似的错误R knnImputation 给出错误 https stackoverflow com questions 45117125 r knnimputation giving er
  • ggplot多个时间不等的时间序列

    我知道有一些与时间序列和多个数据帧相关的已回答问题 但我似乎无法弄清楚这一点 我想绘制 4 个不同压力传感器与时间的时间戳数据 pa 列 我有来自同一实验的 4 个带时间戳的压力读数 dfs 然而 由于传感器故障和数据中的其他信号 传感器收
  • R 版本 4.0.0 上的 ROracle

    当尝试使用 ROracle 时 我收到以下错误消息 gt library ROracle Error package or namespace load failed for ROracle package ROracle was inst
  • 将一个 Rmarkdown 文档中的代码块插入到另一个 Rmarkdown 文档中

    我一直在举办一些小型 R 教程 研讨会 我将 挑战脚本 保存在 Rmarkdown 文档中 它们包含自由文本和 R 代码块 一些代码块是预先填充的 例如 为了设置数据集以供以后使用 而一些代码块则供与会者在研讨会期间填写代码 对于每个挑战脚
  • 基于 dplyr 中的向量创建新列

    With dplyr使用以下命令可以轻松创建新列mutate df lt data frame v1 1 3 v2 c a b c gt mutate df newcol NA v1 v2 newcol 1 1 a NA 2 2 b NA
  • 如何创建具有特定于每个方面的标题和副标题的分面图?

    生成一个图 该图与每列的单独图相结合 带有标题和副标题 以及每个图的垂直线 我使用直方图创建了带有垂直线的列 library ggplot2 library gridExtra library tidyr actualIris lt dat
  • R 中的多面点阵图,例如线框:如何删除条带并添加 1 行字幕

    我使用这种功能 来自iris数据集 model test lt lm Sepal Length Petal Length Sepal Width Petal Width Species 2 data iris gg lt expand gr

随机推荐

  • .NET 4.5 中是否已弃用 ObjectContext?

    我一直在使用ObjectContexts已经很长一段时间了 现在我已经安装了 VS 2012 令我惊讶的是 实体数据模型没有创建代码生成项的选项ObjectContexts and EntityObjects代替DbContexts and
  • Mongoose 在 Node.js 中创建多租户支持连接

    我正在研究一种使用 node js mongoose 和 mongodb 实现多数据库以支持多租户的好方法 我发现 mongoose 支持一种名为createConnection 我想知道使用它的最佳实践 实际上 我将所有这些连接存储在一个
  • 基于智能指针的 CRTP 习惯用法的编译问题

    我正在尝试为 CRTP 示例编译一个最小的工作示例这篇博文 https www fluentcpp com 2017 09 12 how to return a smart pointer and use covariance 它基于智能指
  • 如何将一些“统计数据”从 C# 程序传递到另一个程序?

    我有一个命令行程序 可以 做很多工作 并产生 很多统计数据 它是股票交易软件 对于延迟 错误等非常重要 所以我不想向其中添加 GUI 此外 有时需要 GUI 但控制台应用程序应始终启动 我需要 GUI 来友好地显示收集的统计信息 以只读模式
  • 降低无向图的时间复杂度

    我有一个无向图 表示 Facebook 等社交媒体中的用户连接 有N个节点 从1到N 边由数组 from 和 to 表示 任务数组表示我有兴趣查找该节点 即社交媒体中的用户 的连接的节点号 Example N 5 From 2 2 1 1
  • ASP.NET Core 中 HttpContext 如何响应 END

    我想使用mvcSystem Web HttpContext Current Response End 但尝试使用以下代码在 mvc core 2 中 private readonly IHttpContextAccessor httpCon
  • 如何找出哪个视图是焦点?

    我需要查明活动中是否有任何视图聚焦以及它是什么视图 这个怎么做 Call getCurrentFocus http developer android com reference android app Activity html getC
  • 如何用 sed 替换整行?

    假设我有一个包含行的文件 aaa bbb 现在我想将它们替换为 aaa xxx 我可以这样做 sed s aaa bbb aaa xxx g 现在我有一个包含几行的文件 如下所示 aaa bbb aaa ccc aaa ddd aaa so
  • Microsoft Azure Bot Framework 模拟器未发送消息

    在我的 Windows 10 上 我安装了Microsoft Azure Bot 框架模拟器 https learn microsoft com en us azure bot service bot service debug emula
  • 获取具有特定 fieldName 的所有 lucene 值

    解决this https stackoverflow com questions 618227 faster way to get distinct values from lucene query问题 我创建了一个新的 Lucene 索引
  • 如何从远程文件(Java)获取修改日期?

    我有一个从远程 URL 下载文件的功能 使用 Java 现在我想知道真正的修改日期 因为当我下载它时我丢失了此信息 提前致谢 public void downloadFile String remoteFile String localFi
  • setColorFilter 有时在 Android 可绘制对象上不起作用

    我正在尝试根据用户在偏好中选择的原色在可绘制对象上应用滤色器 这是我正在使用的一段代码 getResources getDrawable R drawable ic batman 1 setColorFilter ColorHelper g
  • argparse 和互斥组,每个组都有自己所需的设置

    我有一个程序需要有一个选项来测试服务器 ID 列表OR对服务器发出命令 这意味着 如果我发出 test 那么不需要其他任何东西 它对每台服务器运行全部测试并打印结果 但是 如果我不指定 test 那么它应该需要一些选项 例如 id and
  • 检查 SQLite 中是否存在列

    我需要检查列是否存在 如果不存在则添加它 根据我的研究 sqlite 似乎不支持 IF 语句 应该使用 case 语句 这是我到目前为止所拥有的 SELECT CASE WHEN exists select from qaqc column
  • 如何更新海燕窗口的名称?

    我正在尝试在保存事件后更新海燕窗口的名称 显示名称 我实现了自己的 NameInfo 类 该类继承自 NameInfo 抽象类 public class MyNameInfo NameInfo private string name str
  • Cckeditor 更新文本区域

    我正在尝试让 ckeditor 工作 显然它没有使用文本区域 因此提交表单时不会在编辑器中提交文本 因为我使用多态关联等 我无法创建 onsubmit 函数来获取 textarea 的值 当提交表单时 所以我发现了这个问题 使用 jQuer
  • Jetpack Compose:如何创建评级栏?

    我正在尝试实施评级栏 我指的是https gist github com vitorprado 0ae4ad60c296aefafba4a157bb165e60 https gist github com vitorprado 0ae4ad
  • Inno Setup:多个下一步按钮

    我想在我的安装程序屏幕上有两个按钮 两个按钮最终都应该将用户带到下一个屏幕 但每个按钮都执行自己的辅助逻辑 是否可以有两个 NextButton 它们都将您带到下一个屏幕 但执行不同的代码 如果做不到这一点 有没有办法以编程方式调用 Wiz
  • 设置 Windows 文件安全性

    我的问题与大多数人相反 我正在用 C 本地生成文件 但是我want将它们标记为已阻止 因此 当用户在 Word 或 Excel 等应用程序中打开它们时 它会在 保护模式 下打开它们 I ve read http answers micros
  • R:向 ggplot2 中的分组直方图添加正态拟合

    我正在寻找最优雅的方法来将正态分布拟合叠加到分组直方图中ggplot2 我知道这个问题之前已经被问过很多次了 但是没有一个建议的选项 比如this one https stackoverflow com questions 7182556