如何将多条密度曲线叠加到R中的一个图中

如何将多条密度曲线叠加到R中的一个图中,r,statistics,plot,R,Statistics,Plot,我有一个数据,看起来像 我打算在一个图中创建多个密度曲线,每个曲线 对应于唯一ID 我尝试使用“sm”包,使用此代码,但没有成功 library(sm) dat <- read.table("mydat.txt"); plotfn <- ("~/Desktop/flowgram_superimposed.pdf"); pdf(plotfn); sm.density.compare(dat$V1,dat$V2, xlab = "Flow Signal") colfill <-

我有一个数据,看起来像

我打算在一个图中创建多个密度曲线,每个曲线 对应于唯一ID

我尝试使用“sm”包,使用此代码,但没有成功

library(sm)
dat <- read.table("mydat.txt");
plotfn <- ("~/Desktop/flowgram_superimposed.pdf");
pdf(plotfn);

sm.density.compare(dat$V1,dat$V2, xlab = "Flow Signal")
colfill <- c(2:10);
legend(locator(1), levels(dat$V2), fill=colfill)

dev.off();
库(sm)
dat尝试使用ggplot2:

dnow <- read.table("http://dpaste.com/88561/plain/")
library(ggplot2)
qplot(V1, colour=factor(V2), data=dnow, geom="density")

dnow以意大利面代码的方式使用基本图形:

plot.multi.dens <- function(s)
{
junk.x = NULL
junk.y = NULL
for(i in 1:length(s))
{
junk.x = c(junk.x, density(s[[i]])$x)
junk.y = c(junk.y, density(s[[i]])$y)
}
xr <- range(junk.x)
yr <- range(junk.y)
plot(density(s[[1]]), xlim = xr, ylim = yr, main = "")
for(i in 1:length(s))
{
lines(density(s[[i]]), xlim = xr, ylim = yr, col = i)
}
}
dnow <- read.table("http://dpaste.com/88561/plain/")
library(sqldf)
x <- unlist(sqldf("select V1 from dnow where V2==0"))
y <- unlist(sqldf("select V1 from dnow where V2==1"))
z <- unlist(sqldf("select V1 from dnow where V2==2"))
plot.multi.dens(list(x,y,z))
library(Hmisc)
le <- largest.empty(x,y,.1,.1)
legend(le,legend=c("x","y","z"), col=(1:3), lwd=2, lty = 1)

plot.multi.dens我发现自己在查看微阵列数据时需要做很多这方面的工作,所以我将其作为我保存在github:上的实用程序代码库的一部分,特别是函数

它使用基本图形,因此您可以从该功能中获得灵感来创建自己的功能,或者将其全部出售(但它依赖于该库中的其他一些功能):

  • ,将数据列表/矩阵/etc转换为密度列表;及
  • 函数(将尺寸“名称”转换为数字轴)
  • (您可以选择安装整个软件包,但我不保证其中的函数不会以某种向后不兼容的方式更改)

    编写自己的函数并不难,但只要确保函数在轴上选择正确的范围就行了。无论如何,您将使用如下代码:

    library(ARE.utils)
    # Create a matrix dataset with separate observations in columns
    dat <- matrix(c(rnorm(100), rnorm(100, mean=3), 
                    rnorm(100, mean=3, sd=2)),
                  ncol=3)
    # Plot them
    plot.densities(dat, along='cols')
    
    库(ARE.utils)
    #创建列中包含单独观察值的矩阵数据集
    
    dat您也可以使用lattice包解决此问题

    require(lattice)
    dnow <- read.table('http://dpaste.com/88561/plain/')
    densityplot(~V1, groups=V2, data=dnow)
    
    require(晶格)
    
    D现在在这里和R列表中同时提问:不酷。考虑到这两组用户之间还没有太多的重叠,我不确定自己是否理解其中的原因。你能详细解释一下为什么不应该这样做吗?“多发帖子浪费带宽、金钱和人们的时间,没有任何好处,永远不应该沉溺其中。”。虽然前两个原因现在不那么重要,但我很珍惜时间,不喜欢在多个列表中阅读同一条消息。我同意多个帖子到多个地方可能会浪费时间。OT(other)H,这是一个机会,表明在回答这个问题时,SO是一个优于列表服务的论坛。好吧,我收回它。既然我们都想提高SO(和R!)的受欢迎程度,那么现在越多越好。在这里使用sqldf的目的是什么?它实际上比订阅慢一百倍:你说得对。但是我喜欢sqldf包和方法,所以我倾向于以无脑的方式使用它;-)史蒂夫,如果这里面有有用的东西并且通过了R CMD检查,一定要把它发给克兰。如果它还没有通过R CMD检查,那么就对该部分进行操作,然后返回到上一步:)Dirk,你是在暗示向后兼容性不应该是一个很大的问题吗?Eduardo:向后兼容性与此有什么关系?欢迎在SO之外给我发电子邮件。我真的不明白你的问题。德克:我想他注意到了我提到的对ARE.utils进行向后不兼容更改的可能性。我不知怎的(错误地?)期望,像爱德华多一样,CRAN上的包会比我这里的更好维护/设计。虽然我确实试图设计/实现好这些东西,但发现我已经重新实现了一些可以用base::R中的一些命令做得更好的东西,并随后将其从库中删除,这并不少见。也许有一天,如果我觉得它符合标准,我会向CRAN提交,但在此之前,我很乐意让其他人使用它来获得灵感:-)链接不再有效。这样我就不能很好地理解你的解决方案的作用。你能修好链接吗?谢谢…@Manoel
    qplot(mtcars$drat,color=factor(mtcars$cyl),data=mtcars,geom=“density”)
    应该为您提供一个功能示例。