在R中绘制叠加的侧面图。

5
我有以下的 R 代码:
x = c(rep(2,10),rep(4,10))
y1 = c(5.1,3,4.2,4.1,4.8,4.0,5,4.15,3,4.5)
y2 = c(9.1,8,9.2,8.2,7,9.5,8.8,9.3,10,10.4)
y = c(y1,y2)
plot(x,y,pch=16,cex=0.9,xlim=c(0,6),ylim=c(0,13))

这段代码生成了两组点的图形。我用PowerPoint在这些点的两侧叠加了正态曲线。如何在R中实现这个功能(绘制这些侧向的正态曲线),并使用实际的均值和标准差值?请注意,重申一遍,这些正态曲线不是图形的一部分。以上代码只生成原始图形。
1个回答

8

首先,计算y1y2的均值和标准差。

m1<-mean(y1)
s1<-sd(y1)
m2<-mean(y2)
s2<-sd(y2)

然后创建了两个数据框(为方便起见),包含y值作为数字序列(宽于实际的y1y2值)。接着使用dnorm()计算了x的密度值,并计算了均值和标准差值。然后添加了24来将值移动到所需的位置。

df1<-data.frame(yval=seq(1,7,0.1),xval=(dnorm(seq(1,7,0.1),m1,s1)+2))
df2<-data.frame(yval=seq(6,12,0.1),xval=(dnorm(seq(6,12,0.1),m2,s2)+4))

增加了使用lines()函数的密度线。

plot(x,y,pch=16,cex=0.9,xlim=c(0,6),ylim=c(0,13))
with(df1,lines(xval,yval))
with(df2,lines(xval,yval))

enter image description here


如果x轴从约50到100,y轴从约0到40000。那么曲线看起来就像是平直的线段。在这个范围内如何处理呢? - CodeGuy
然后,您可以通过某个常数或y的平均值将dnorm(seq(1,7,0.1),m1,s1)的结果进行乘法运算。 - Didzis Elferts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接