如何在y轴上绘制比例图?

时间:2012-02-20 11:23:51

标签: r plot

我在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轴上,所以曲线下面积对于所有三个变量都是相等的?非常感谢!

2 个答案:

答案 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")

enter image description here

答案 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)}))))

这也可以满足文森特的观点,即密度函数不一定限制在它们的范围内。

相关问题