首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将两个正态分布叠加在R中一个曲线图上的两个直方图上

将两个正态分布叠加在R中一个曲线图上的两个直方图上
EN

Stack Overflow用户
提问于 2020-08-27 03:02:11
回答 1查看 708关注 0票数 0

我正在尝试在R中的同一个图中绘制两个直方图上的两个正态分布。下面是我希望它是什么样子的一个示例:

这是我当前的代码,但我没有得到正确覆盖的第二个正态分布:

代码语言:javascript
运行
复制
g = R_Hist$`AvgFeret,20-60`
m<-mean(g)
std<-sqrt(var(g))

h <- hist(g, breaks = 20, xlab="Average Feret Diameter", main = "Histogram of 60-100um beads", col=adjustcolor("red", alpha.f =0.2))
xfit <- seq(min(g), max(g), length = 680)
yfit <- dnorm(xfit, mean=mean(g), sd=sd(g))
yfit <- yfit*diff(h$mids[1:2]) * length(g)

lines(xfit, yfit, col = "red", lwd=2)

k = R_Hist$`AvgFeret,60-100`
ms <-mean(k)
stds <-sqrt(var(k))

j <- hist(k, breaks=20, add=TRUE, col = adjustcolor("blue", alpha.f = 0.3))
xfit <- seq(min(j), max(j), length = 314)
yfit <- dnorm(xfit, mean=mean(j), sd=sd(j))
yfit <- yfit*diff(j$mids[1:2]) * length(j)

lines(xfit, yfit, col="blue", lwd=2)

下面是这段代码生成的图形:

我还没有弄清楚如何重定标轴,所以任何帮助也会很感激,但我相信我可以查一下!我是否应该在此应用程序中使用ggplot2?如果是这样,如何在库中叠加法线?

另请注意,以下是绘制第二条(蓝色)线时生成的错误:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-27 13:15:14

要使它们具有相同的规模,最简单的方法可能是首先运行hist()来获取这些值。

代码语言:javascript
运行
复制
h <- hist(g, breaks = 20, plot = FALSE)
j <- hist(k, breaks = 20, plot = FALSE)

ymax <- max(c(h$counts, j$counts))
xmin <- 0.9 * min(c(g, k))
xmax <- 1.1 * max(c(g,k))

然后,您可以在第一次调用hist()时简单地使用参数xlimylim

代码语言:javascript
运行
复制
h <- hist(g, breaks = 20,
          xlab="Average Feret Diameter",
          main = "Histogram of 60-100um beads",
          col=adjustcolor("red", alpha.f =0.2),
          xlim=c(xmin, xmax),
          ylim=c(0, ymax))

第二行(蓝色)的错误是因为您没有用k (原始值)替换j (直方图对象):

代码语言:javascript
运行
复制
xfit <- seq(min(k), max(k), length = 314)
yfit <- dnorm(xfit, mean=mean(k), sd=sd(k))
yfit <- yfit*diff(j$mids[1:2]) * length(k)

至于ggplot2方法,你可以在here和其中链接的帖子中找到一个很好的答案。

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

https://stackoverflow.com/questions/63604125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档