单个图上的核密度图

时间:2013-02-15 22:06:36

标签: r

我一直试图使用R作为简单的密度图:

plot(density(Data$X1),col="red")
plot(density(Data$X2),col="green")

由于我想比较,我想在一个图中绘制两个。但'matplot'不起作用!!我也试过用ggplot2作为:

library(ggplot2)
qplot(Data$X1, geom="density")
qplot(Data$X2, add = TRUE, geom="density")

同样在这种情况下,情节单独出现(虽然我写了add = TRUE)!!有人能想出一个简单的问题解决方案吗?

4 个答案:

答案 0 :(得分:3)

您可以尝试:

plot(density(Data$X1),col="red")

points(density(Data$X2),col="green")

我必须补充一点,理想情况下,xlimylim值应设置为包含X1和X2的范围,可以按如下方式进行:

foo <- density(Data$X1)

bar <- density(Data$X2)

plot(foo,col="red", xlim=c(min(foo$x,bar$x),max(foo$x,bar$x)) ylim=c(min(foo$y,bar$y),max(foo$y,bar$y))

points(bar,col="green")

答案 1 :(得分:3)

ggplot2lattice中,您需要对数据进行整形以对其进行处理。

例如:

    dat <- data.frame(X1= rnorm(100),X2=rbeta(100,1,1))
    library(reshape2)
    dat.m <- melt(dat)

使用``lattice`

  densityplot(~value , groups = variable, data=dat.m,auto.key = T)

enter image description here

使用``ggplot2`

 ggplot(data=dat.m)+geom_density(aes(x=value, color=variable))

enter image description here 编辑添加X1 + X2

使用lattice和扩展的formua接口,这很容易做到:

densityplot(~X1+X2+I(X1+X2) , data=dat)   ## no need to reshape data!!

enter image description here

答案 2 :(得分:1)

在基础图形中,如果保持范围相同并在它们之间使用par(new=TRUE),则可以覆盖密度图。我认为add=TRUE是一种基本的图形策略,有些功能但并非所有功能都会受到尊重。

答案 3 :(得分:0)

如果您在n的来电中指定fromtodensity,并确保它们在2个来电之间匹配,那么您应该可以使用matplot只需一步绘制(您需要将2组y值绑定到单个矩阵中)。