如何使用 geom_bar 将连续变量映射到 y 轴?
How to map a continuous variable to the y-axis with geom_bar?
我有一些基因组数据已按染色体分箱,每个分箱的值介于 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")有不同的长度,因此它们有不同数量的箱子。我可以用以下内容正确表示:
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 轴上绘制 bin 的计数并填充连续变量而不弄乱刻度?
如果我理解你的问题,我认为你想要 fill
美学而不是 color
。此外,根据您的评论,Bin
似乎是一个 bin ID,而不是每个 Chr
值的 bin 计数。因此,在下面的代码中,我们只是为 Bin
的每个值创建一个等于 1 的新变量 bin.count
。然后我们使用 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")
我有一些基因组数据已按染色体分箱,每个分箱的值介于 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")有不同的长度,因此它们有不同数量的箱子。我可以用以下内容正确表示:
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 轴上绘制 bin 的计数并填充连续变量而不弄乱刻度?
如果我理解你的问题,我认为你想要 fill
美学而不是 color
。此外,根据您的评论,Bin
似乎是一个 bin ID,而不是每个 Chr
值的 bin 计数。因此,在下面的代码中,我们只是为 Bin
的每个值创建一个等于 1 的新变量 bin.count
。然后我们使用 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")