我在R中使用sm包来绘制几个具有不同样本大小的变量的密度图,如下所示:
var1 <- density(vars1[,1])
var2 <- density(vars2[,1])
var3 <- density(vars3[,1])
pdf(file="density.pdf",width=8.5,height=8)
plot(var1,col="BLUE")
par(new=T)
plot(var2,axes=FALSE,col="RED")
par(new=T)
plot(var3,axes=FALSE,col="GREEN")
dev.off()
我遇到的问题是,我希望y轴显示比例,以便我可以以更有意义的方式相互比较不同的变量。所有三个密度图的最大值现在完全相同,我很确定如果y轴显示比例,它们就不会出现。有什么建议?非常感谢!
编辑:
我刚刚了解到我不应该在现有的情节上绘图,所以现在代码的绘图部分看起来像这样:
pdf(file="density.pdf",width=8.5,height=8)
plot(var1,col="BLUE")
lines(var2,col="RED")
lines(var3,col="GREEN")
dev.off()
然而,这些线的最大值现在与样本大小差异非常一致。有没有办法将比例放在所有三个变量的y轴上,所以曲线下面积对于所有三个变量都是相等的?非常感谢!
答案 0 :(得分:2)
不要在现有绘图的顶部绘图,因为它们的轴可能不同。相反,在绘制第一个密度后,使用lines()
绘制第二个和第三个密度。如有必要,请调整ylim
中的plot()
参数,使其全部适合。
样本量无关紧要的一个例子:
set.seed(1)
D1 <- density(rnorm(1000))
D2 <- density(rnorm(10000))
D3 <- density(rnorm(100000))
plot(D1$x,D1$y,type='l',col="red",ylim=c(0,.45))
lines(D2$x,D2$y,lty=2,col="blue")
lines(D3$x,D3$y,lty=3,col="green")
答案 1 :(得分:1)
你可以通过不限制的硬编码使tim的解决方案更加灵活。
plot(D1$x,D1$y,type='l',col="red",ylim=c(0, max(sapply(list(D1, D2, D3),
function(x) {max(x$y)}))))
这也可以满足文森特的观点,即密度函数不一定限制在它们的范围内。