从 R 中的数据范围生成热图
Generating a Heatmap From Data Range in R
我在 R 中生成了一个数据帧列表(名为 "trans")。每个列表有 3 列:斜率、开始和停止。以下是一小部分数据:
> 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
在每一行中,"slope" 是感兴趣的值,而 "start" 和 "stop" 表示该斜率存在的范围。所有数据帧的 "start" 和 "stop" 值大约从 -0.04 到 -1。我的数据框有不同的行数。
我想绘制整个 -0.04:-1 范围内的不同斜率(最好是热图),这样热图的每一行都代表我列表中的每个数据帧。有没有一种优雅的方法可以使用我生成的当前信息集来执行此操作?我能想到的唯一解决方案是将每个数据框转换为 2 列,其中每个开始-停止范围内的每个值(小数点后 10^10 位!)都列在一列中,该范围内的斜率列在另一列。
我对 gplots 包中的 heatmap.2 非常熟悉,但想知道像这样的情节是否是我必须从头开始制作的东西。
我猜你的目标是什么,但我认为你可以通过 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))
结果:
我在 R 中生成了一个数据帧列表(名为 "trans")。每个列表有 3 列:斜率、开始和停止。以下是一小部分数据:
> 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
在每一行中,"slope" 是感兴趣的值,而 "start" 和 "stop" 表示该斜率存在的范围。所有数据帧的 "start" 和 "stop" 值大约从 -0.04 到 -1。我的数据框有不同的行数。
我想绘制整个 -0.04:-1 范围内的不同斜率(最好是热图),这样热图的每一行都代表我列表中的每个数据帧。有没有一种优雅的方法可以使用我生成的当前信息集来执行此操作?我能想到的唯一解决方案是将每个数据框转换为 2 列,其中每个开始-停止范围内的每个值(小数点后 10^10 位!)都列在一列中,该范围内的斜率列在另一列。
我对 gplots 包中的 heatmap.2 非常熟悉,但想知道像这样的情节是否是我必须从头开始制作的东西。
我猜你的目标是什么,但我认为你可以通过 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))
结果: