首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R:在ggplot2中向分组直方图添加法线拟合

R:在ggplot2中向分组直方图添加法线拟合
EN

Stack Overflow用户
提问于 2015-09-06 04:06:31
回答 1查看 2.9K关注 0票数 4

我在寻找最优雅的方法来叠加正态分布在ggplot2中的分组直方图中。我知道这个问题以前已经问过很多次了,但我觉得没有一个选项(比如this onethis one )是非常优雅的,至少除非可以让stat_function处理数据的每一个特定部分。

将正态分布叠加到非分组直方图上的一种比较优雅的方法是使用geom_smoothmethod="nls" (除了它不是一个自启动函数之外,还必须指定起始值):

代码语言:javascript
运行
AI代码解释
复制
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)) 

不过,我想知道这种方法是否也可以用于在分组直方图中添加正态分布。

代码语言:javascript
运行
AI代码解释
复制
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()+ stat_normfit(定义ggplot2的包(有可能进行分组)?(我什么也找不到,但这似乎是一项很普通的任务,所以我只是想知道)

我之所以希望代码尽可能简短,是因为这是为了一门课程,我想让事情尽可能简单.

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-06 10:56:44

是像这样吗?

代码语言:javascript
运行
AI代码解释
复制
## 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(...)的问题是不能使用aes(...)映射args=...列表,正如注释中的帖子所解释的那样。因此,您必须创建一个辅助data.frame (本例中的gg),它具有拟合分布的x和y值,并使用geom_line(...)

上面的代码在fitdistr(...)包中使用MASS来计算按性别分组的数据的平均和sd的最大可能性估计,基于正常假设(如果这有意义的话,可以使用不同的分布)。然后,它通过将weight中的范围划分为100个增量来创建x轴,并计算适当的平均值和sd的dnorm(x,...)。由于结果是密度,我们必须使用以下方法来调整:

代码语言:javascript
运行
AI代码解释
复制
gg$y <- gg$y * aggregate(weight~sex, weight,length)$weight * diff(range(weight$weight))/30

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32423372

复制
相关文章
跟着PNAS学画图:R语言ggplot2分组添加拟合曲线
这篇论文的数据和代码是公开的,链接是 https://github.com/CPop-SDU/sex-gap-e0-pnas,我们按照他提供的代码和数据试着复原一下论文里的图。今天的推文重复的内容是论文中的Figure1A
用户7010445
2021/09/22
2.5K0
ggplot2在图上添加线性拟合方程和R值
今天给大家分享三种在ggplot2包画的图形上添加拟合的线性回归方程和R^2的值的方法。
生信交流平台
2020/09/14
14.8K0
跟着Nature Communications 学画图~ggplot2散点图分组添加拟合曲线
今天继续 跟着Nature Communications学画图系列第四篇。学习R语言ggplot2包画散点图,然后分组添加拟合曲线。对应的是论文中的Figure2
用户7010445
2020/11/13
4.8K0
跟着Nature Communications 学画图~ggplot2散点图分组添加拟合曲线
答读者问:如何用R语言ggplot2画抖动散点图加分组拟合线
基本的形式就是抖动散点图再加上分组的拟合曲线,论文中具体用到的是什么数据我没有仔细看,这里我就用之前推文中的gwas数据来做演示
用户7010445
2023/08/23
6360
答读者问:如何用R语言ggplot2画抖动散点图加分组拟合线
答读者问~R语言ggplot2添加拟合曲线并给指定点添加注释
他的问题是拟合曲线和y=1相交,根据我自己的实际数据,比如y=15这里相交,首先在y=15这里添加水平线,使用到的是geom_hline()函数
用户7010445
2021/03/15
1.5K0
ggplot2拓展功能:添加拟合公式(Equations, R2, BIC, AIC etc.)
Fit polynomial equation: Create some data: set.seed(4321) x <- 1:100 y <- (x + x^2 + x^3) + rnorm(length(x), mean = 0, sd = mean(x^3) / 4) my.data <- data.frame(x, y, group = c("A", "B"), y2 = y * c(0.5,2), block = c("a", "a", "b", "b")) Fit polynomial regression line and add labels: # Polynomial regression. Sow equation and adjusted R2 formula <- y ~ poly(x, 3, raw = TRUE) p <- ggplot(my.data, aes(x, y2, color = group)) + geom_point() + geom_smooth(aes(fill = group), method = "lm", formula = formula) + stat_poly_eq( aes(label = paste(..eq.label.., ..adj.rr.label.., sep = "~~~~")), formula = formula, parse = TRUE ) ggpar(p, palette = "jco")
拴小林
2020/11/04
5.9K0
ggplot2拓展功能:添加拟合公式(Equations, R2, BIC, AIC etc.)
R语言ggplot2画热图添加分组信息的颜色条
之前有人在公众号留言问文章开头这幅图如何实现,下面的B图是折线图加柱形图,相对比较容易实现,上面的A图稍微有点复杂,我想到的办法是拼图,图A可以看成三个热图,然后加一个堆积柱形图,最后将四个图组合到一起。那就按照这个思路试一下看能不能实现。 最初的想法是左侧的颜色条用堆积柱形图来实现,又看了一遍Y叔公众号关于aplot这个包的推文,发现他是用geom_tile()函数实现的,仔细想想还是geom_tile()函数实现起来比较方便。 首先解决昨天的遗留问题:ggplot2画图添加文字内容的时候如何添加下划线
用户7010445
2021/01/06
5.2K0
「R」ggplot2在R包开发中的使用
没有特别系统的学习 tidy evaluation 这方面的高级操作,最近有空准备补一补,学习下这方面的知识。
王诗翔呀
2022/03/30
7K0
R语言ggplot2频率分布直方图小例子
image.png 将其另存为csv格式。 以上数据来源 https://www.r-graph-gallery.com/220-basic-ggplot2-histogram.html
用户7010445
2020/03/03
7.2K0
「R」使用 ggplot2 进行曲线拟合
有读者询问如何对散点图拟合非线性的曲线。实际上我们通常看到的无论是直线拟合还是各种曲线拟合都属于广义线性模型。
王诗翔呀
2022/01/21
1.8K0
「R」使用 ggplot2 进行曲线拟合
跟着Nature学作图:R语言ggplot2频率分布直方图和散点图添加误差线
https://www.nature.com/articles/s41586-022-05275-y
用户7010445
2023/01/06
6820
跟着Nature学作图:R语言ggplot2频率分布直方图和散点图添加误差线
R语言ggplot2杂记:图例去掉灰色背景、添加椭圆和圆形分组边界
常规气泡图的图例 示例数据就直接用内置的鸢尾花的数据集了 library(ggplot2) colnames(iris) ggplot(iris,aes(x=Sepal.Length,y=Sepal.Width))+ geom_point(aes(size=Petal.Length,color=Species))+ guides(color=F)+ scale_size_continuous(range = c(5,10), breaks = c
科研菌
2021/02/12
3.2K0
R语言ggplot2杂记:图例去掉灰色背景、添加椭圆和圆形分组边界
R语言ggplot2散点图添加拟合曲线和回归方程的简单小例子
https://stackoverflow.com/questions/7549694/add-regression-line-equation-and-r2-on-graph
用户7010445
2021/07/30
26.8K0
【R语言】因子在临床分组中的应用
我们还是以TCGA数据中的CHOL(胆管癌)这套数据为例。关于这套临床数据的下载可以参考
生信交流平台
2022/09/21
3.4K0
【R语言】因子在临床分组中的应用
R语言ggplot2分组箱线图添加误差线的简单小例子
这样多了一个垂直线,不好看,我们把误差线的图层放到最下层,就是把代码写到boxplot的前面,然后加一些基本的美化
用户7010445
2021/10/13
5.3K0
「R」ggplot2 添加矫正p值
ggpubr 实现了 ggplot2 绘图添加 p 值的良好支持,但读者需要注意它是没有经常矫正的。矫正 p 值需要额外的处理。
王诗翔呀
2020/07/03
1.6K0
「R」ggplot2 添加矫正p值
跟着Cell学作图:R语言ggplot2做散点图并添加拟合曲线和文字标签
https://www.sciencedirect.com/science/article/pii/S0092867421008916#da0010
用户7010445
2021/10/25
2K0
【R语言】散点图+直方图+密度曲线(二)
今天小编给大家介绍第二种方法,绘制散点图,并且在散点图上添加直方图和密度曲线。我们还是使用☞【R绘图】散点图+直方图(密度图)里面使用的数据。这次我们使用的R包叫ggExtra
生信交流平台
2022/09/21
1.4K0
【R语言】散点图+直方图+密度曲线(二)
跟着Nature学作图:R语言ggplot2分组散点图并添加误差线
https://www.nature.com/articles/s41586-023-05710-8
用户7010445
2023/08/23
9490
跟着Nature学作图:R语言ggplot2分组散点图并添加误差线
跟着Nature Microbiology学作图:R语言ggplot2做散点图添加拟合曲线和p值
本地文件 s41564-021-00997-7.pdf 论文 Protective role of the Arabidopsis leaf microbiota against a bacterial pathogen image.png 今天的推文来重复一下论文中的figure3c 散点图添加拟合曲线 image.png 读取数据集 library(readxl) df<-read_excel("41564_2021_997_MOESM10_ESM.xlsx") head(df) colna
用户7010445
2021/12/01
1.2K0
跟着Nature Microbiology学作图:R语言ggplot2做散点图添加拟合曲线和p值

相似问题

在R中的直方图上添加一个最佳拟合法线

12

R ggplot2向直方图添加函数

20

向直方图添加拟合函数

110

R+ ggplot2 -在直方图顶部绘制法线

10

向ggplot2 R中的重叠直方图添加图例

110
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档