r - 在R中的一个图上覆盖两个直方图上的两个正态分布
问题描述
我正在尝试在 R 中的同一图中绘制两个直方图上的两个正态分布。这是我希望它看起来像的示例:
这是我当前的代码,但我没有得到正确覆盖的第二个正态分布:
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 吗?如果是这样,您如何在该库中叠加一条法线曲线?
解决方案
要使它们具有相同的规模,最简单的方法可能是首先运行hist()
以获取值。
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))
然后您可以简单地使用参数xlim
并ylim
在您的第一次调用中hist()
:
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))
第二行(蓝色)的错误是因为您没有将j
(直方图对象)替换为k
(原始值):
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
中找到一个很好的答案。
推荐阅读
- amazon-web-services - 我应该为任何数据类型使用哪种插槽类型,或者我们说哪个可以接受 AWS lex 中的字符串类型数据
- javascript - 以特定网格布局显示图像:ejs
- react-native - Redux 应用程序中通常如何处理声音?
- reactjs - 使用 Relay 运行时出现 React Native 应用程序错误
- java - java中的泛型方法可以限制可接受的类型吗?
- c++ - C++ 排序 lambda 比较器 EXC_BAD_ACCESS
- javascript - 如何使 svg 路径可移动?
- ios - 如何在 Alamofire 中使用 PUT 请求
- java - Java - 将 xml 转换为 JAVA Pojo 类,包括 java 注释(Simplexml)
- javascript - 从量角器页面对象正确返回值