2

我一直在尝试使用 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

4 回答 4

3

你可以试试:

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

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

我必须补充一点,理想情况下应该将xlimandylim值设置为包括 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")

于 2013-02-15T22:18:31.610 回答
3

ggplot2或者lattice您需要重塑数据以支持它们。

例如 :

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

使用“格子”

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

在此处输入图像描述

使用“ggplot2”

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

在此处输入图像描述 编辑添加 X1+X2

使用 lattice 和扩展的 formua 接口,非常容易做到这一点:

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

在此处输入图像描述

于 2013-02-15T22:46:49.853 回答
1

在基本图形中,如果您保持范围相同并par(new=TRUE)在它们之间使用,您可以覆盖密度图。我认为这add=TRUE是一种基本图形策略,某些功能但并非全部都会兑现。

于 2013-02-15T22:16:32.843 回答
0

如果您在调用中指定nfrom和并确保它们在两个调用之间匹配,那么您应该能够使用一步绘制两者(您需要将 2 组 y 值绑定到单个矩阵中) .todensitymatplot

于 2013-02-15T23:28:34.483 回答