绘图中每个点的高度值

时间:2013-07-22 18:52:56

标签: r data-visualization scatter-plot kernel-density

我在一个名为s1m的数据框中有蛋白质 - 蛋白质相互作用的数据。每个DB和AD对进行交互,我也可以绘制它:

> head(s1m)
     DB_num AD_num
[1,]      2   8153
[2,]      7   3553
[3,]      8   4812
[4,]     13   7838
[5,]     24   3315
[6,]     24   6012

数据图如下: http://i.imgur.com/RTaeJ5r.jpg

然后我使用了在本网站上找到的代码来绘制填充轮廓线:

## compute 2D kernel density, see MASS book, pp. 130-131
require(MASS)
z <- kde2d(s1m[,1], s1m[,2], n=50)
plot(s1m, xlab="X label", ylab="Y label", pch=19, cex=.4)
filled.contour(z, drawlabels=FALSE, add=TRUE)

它给了我最终的图像(减去涂鸦): result

我的问题:我需要在原始s1m数据框中注释每个数据行,并在等高线图上标注与其高度相对应的数字(因此我在上图中的涂鸦)。我认为列表z具有我正在寻找的值,但我不确定。

最后,我希望我的数据看起来像这样,所以我可以分组研究蛋白质相互作用:

         DB_num AD_num   height
    [1,]      2   8153        1
    [2,]      7   3553        1
    [3,]      8   4812        3
    [4,]     13   7838        6
    [5,]     24   3315        2
    [6,]     24   6012        etc.

1 个答案:

答案 0 :(得分:2)

如果您希望实际高度不是每个分配给

,那么这是一个选项
## dummy data
DF <- data.frame(DB_num = rnorm(10000), AD_num = rnorm(10000))

require("MASS")

kde <- kde2d(DF[,1], DF[,2], n = 50)

注意kde2d作为组件z返回,这是一个矩阵,在这种情况下有50行和列,其中行对应x数据,列对应{{1数据。由于矩阵只是一个向量,并且数据由列填充,我们可以利用它并将每个yxy叠加(n这里) ,然后放松n = 50

kde$z

这会产生

dd <- dim(kde$z)
res <- data.frame(DB_num = rep(kde$x, times = dd[1]),
                  AD_num = rep(kde$y, times = dd[2]),
                  height = as.numeric(kde$z))

要获得垃圾箱,您需要关注> head(res) DB_num AD_num height 1 -3.582508378 -3.79074271 0.0000000000000000000000000006907447484 2 -3.429230262 -3.63682706 0.0000000000000000000000002951259863229 3 -3.275952146 -3.48291141 0.0000000000000000000000558203373144190 4 -3.122674029 -3.32899576 0.0000000000000000000055565720524140235 5 -2.969395913 -3.17508011 0.0000000000000000014967010810961022503 6 -2.816117797 -3.02116446 0.0000000000000008159370528768207499471 所做的事情,即通过

形成休息时间
filled.contour

然后使用nlevels <- 20 ## default brks <- pretty(range(res$height), nlevels) > brks [1] 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 [16] 0.15 0.16 根据cut将每个height分配到一个bin,类似

brks

哪个给出了

res <- transform(res, bin = as.numeric(cut(height, brks)))

您可能想查看> head(res) DB_num AD_num height bin 1 -3.582508378 -3.79074271 0.0000000000000000000000000006907447484 1 2 -3.429230262 -3.63682706 0.0000000000000000000000002951259863229 1 3 -3.275952146 -3.48291141 0.0000000000000000000000558203373144190 1 4 -3.122674029 -3.32899576 0.0000000000000000000055565720524140235 1 5 -2.969395913 -3.17508011 0.0000000000000000014967010810961022503 1 6 -2.816117797 -3.02116446 0.0000000000000008159370528768207499471 1 的详细信息以确定垃圾箱边界的行为,但这应该让您足够接近。