1

我有一些基因组数据已经按染色体分类,每个分类的值介于 0 和 1 之间。这是一个示例:

Chr Bin Value
1   1   0.40 
1   2   0.12
1   3   0.45
1   4   0.67
2   1   0.32
2   2   0.12
3   1   0.22
3   2   0.44
3   3   0.55
4   1   0.21

需要注意的重要一点是染色体(上面的“Chr”)具有不同的长度,因此它们具有不同数量的 bin。我可以用以下正确表示这一点:

ggplot(dat, aes(Chr)) + coord_flip() + geom_bar()

这只是显示了 bin 数量的条形图。我想做的是用连续值填充条形,这就是我遇到麻烦的地方。我的尝试:

ggplot(dat, aes(x=Chr, y=Value, color=Value)) + coord_flip() + theme_bw() + geom_bar(stat="identity") + scale_color_gradient("Value", low = "white", high = "black")

这产生了我想要的那种情节,但是 y 轴现在不正确并且没有显示 bin 的数量(我猜是因为我将值映射到 y?)。如何在 y 轴上绘制箱数并填充连续变量而不弄乱比例?

4

1 回答 1

2

如果我理解您的问题,我认为您想要的是fill美学而不是color. 此外,根据您的评论,它看起来像是Bin一个 bin ID,而不是每个值的 bin 计数Chr。因此,在下面的代码中,我们只是bin.count为 的每个值创建一个等于 1的新变量Bin。然后我们使用y=bin.count,以便每个都Bin被计算一次。我还在每个栏中添加了文本标签,以防您想标记它们。

library(dplyr)

ggplot(dat %>% mutate(bin.count=1) %>%
         group_by(Chr) %>%
         mutate(bin.pos = cumsum(bin.count) - 0.5*bin.count), 
       aes(x=Chr, y=bin.count, fill=Value)) + 
  coord_flip() + theme_bw() + 
  geom_bar(stat="identity") + 
  geom_text(aes(label=paste0("Bin ID: ", Bin), y=bin.pos), colour="white") +
  scale_fill_gradient("Value", low = "white", high = "black", 
                      limits=c(0,max(dat$Value))) +
  scale_y_continuous(breaks=0:4) +
  labs(y="Bins")

在此处输入图像描述

于 2015-09-10T17:53:46.313 回答