8

可能重复:
如何在 R 中叠加密度图?

我最近开始使用微阵列数据集,并试图掌握 R。我希望从我的结果数据中制作一些图,但是我被困在下面。

我有以下数据(myData),

cpg samp1 samp2 samp3 
cpg1 0.43 0.32 0.21 
cpg2 0.43 0.22 1.00 
cpg3 0.11 0.99 0.78 
cpg4 0.65 0.32 0.12 
cpg5 0.11 0.43 0.89

我希望为此获得一个密度图,

我做了以下,

plot (density(MyData$samp1), col="red") 
lines (density(MyData$samp2), col="green") 
lines (density(MyData$samp3), col="blue") 

但是这样做并不能给我正确的绘图,因为并非所有样本曲线都符合绘图限制。我确实尝试过寻找答案,但老实说,我仍然无法解决这个问题。你能帮我知道如何为上述设置我的比例吗?或者我应该对上面的代码做些什么,以便所有曲线都在范围内?我有很多样本,所以我需要一个可以在正确缩放后自动为每个样本分配不同颜色曲线的东西。

提前致谢..

4

3 回答 3

6

您将需要更改原始绘图的轴限制以适应所有内容。添加不同的行时,这不会自动为您完成:

例如

plot (density(MyData$samp1), col="red",ylim=c(0,3.5),xlim=c(-1,2)) 
lines (density(MyData$samp2), col="green") 
lines (density(MyData$samp3), col="blue")

在此处输入图像描述

于 2012-09-17T09:14:33.177 回答
4

使用这个lattice包(我敢肯定一个ggplot2例子就在后面),你可以使用这个densityplot函数:

library(lattice)
densityplot(~ samp1 + samp2 + samp3, data = myData, auto.key = TRUE)

在此处输入图像描述

或者reshape2在绘图之前使用该包将您的数据转换为高格式:

library(reshape2)

myDataM<-melt(myData)

densityplot(~ value, groups = variable, data = myDataM, auto.key = TRUE)
于 2012-09-17T09:47:52.777 回答
2

您还可以自动生成 x 轴和 y 轴的限制:

ranges <-  apply(MyData, 2,
             function(x) { dens <- density(x); c(range(dens$x), range(dens$y)) })

plot(density(MyData$samp1), col="red",
       xlim = range(ranges[1:2, ]), ylim = range(ranges[3:4, ])) 
lines(density(MyData$samp2), col="green") 
lines(density(MyData$samp3), col="blue")

密度

于 2012-09-17T09:36:47.953 回答