从R中的数据范围生成热图

时间:2018-05-07 23:26:01

标签: r heatmap continuous spectrum gplots

我在R中生成了一个数据框列表(名为“trans”)。每个列表有3列:slope,start和stop。以下是一小部分数据:

> trans
$a
          slope       start       stop
1  0.0006718865 -0.85576923 -1.0000000
2 -0.0005769719 -0.65384615 -0.8557692
3  0.0000698207 -0.50000000 -0.6538462
4 -0.0001124370 -0.26923077 -0.5000000
5  0.0005659248 -0.03846154 -0.2692308

$b    
          slope       start       stop
1  5.689229e-04 -0.85148515 -1.0000000
2 -1.613771e-04 -0.23762376 -0.8514851
3  9.879804e-05 -0.03960396 -0.2376238

在每一行中,“斜率”是感兴趣的值,而“开始”和“停止”表示该斜率存在的范围。所有数据帧的“开始”和“停止”值大致从-0.04到-1。我的数据框有不同的行数。

我想绘制(最好是热图)整个范围-0.04:-1的不同斜率,这样热图的每一行代表我列表中的每个数据帧。有没有一种优雅的方法来处理我生成的当前信息集?我能想到的唯一解决方案是将每个数据帧转换为2列,其中每个起始 - 停止范围内的每个值(小数点后10 ^ 10!)列在一列中,其中列出了该范围内的斜率另一栏。

我对gplots包中的heatmap.2非常熟悉,但不得不怀疑这样的情节是否是我必须从头开始制作的。

1 个答案:

答案 0 :(得分:1)

我猜你的目标是什么,但我认为你可以用ggplot2::geom_rect()实现这一目标。

a <- read.table(textConnection("
slope       start       stop
1  0.0006718865 -0.85576923 -1.0000000
2 -0.0005769719 -0.65384615 -0.8557692
3  0.0000698207 -0.50000000 -0.6538462
4 -0.0001124370 -0.26923077 -0.5000000
5  0.0005659248 -0.03846154 -0.2692308
"))

b <- read.table(textConnection("
slope       start       stop
1  5.689229e-04 -0.85148515 -1.0000000
2 -1.613771e-04 -0.23762376 -0.8514851
3  9.879804e-05 -0.03960396 -0.2376238"))


trans <- list(a = a,b = b)

trans2 <- do.call(rbind, lapply(seq_along(trans),function(x) cbind(trans[[x]],name = x)))


require(ggplot2)

ggplot(trans2, aes(xmin = name, xmax = (name+1),
                   ymin = start, ymax = stop,
                   fill = slope)) +
  geom_rect() +
  scale_x_continuous(breaks = seq_along(trans)+.5, labels = names(trans))

结果:

plot