如何使用geom_bar在ggplot2中制作连接的条形图?

时间:2019-07-30 01:37:50

标签: r ggplot2

我正在尝试使用geom_bar获取条形图

bar plot

用线连接。 如何在样本之间绘制连接线?

ggplot()+
  geom_bar(data = data_bar,
           aes(x = Sample, y =Percentage, fill = Taxon),
           colour = 'white', width =0.3, stat="identity")+
  guides(fill= guide_legend(ncol = 1))

我同时使用geom_bar和geom_line进行了尝试,但看起来很奇怪

weird plot

似乎连接的线从A样本的中心开始到B样本的中心。

ggplot()+
  geom_bar(data = data_bar,
           aes(x = Sample, y =Percentage, fill = Taxon),
           colour = 'white', width =0.3, stat="identity")+
  geom_line(data = rev(data),
            aes(x = Sample, y =Percentage, group = Taxon, color = Taxon),
            size = 0.3, stat = 'identity')+
  guides(fill= guide_legend(ncol = 1))

我想获得更好的图,例如连接的线从A样本条的右边缘开始到B样本条的左边缘开始。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

我不知道执行此操作的内置方法,但是如果知道标杆的位置,则可以使用set.seed(0) data_bar <- data.frame( stringsAsFactors = F, Sample = rep(c("A", "B"), each = 10), Percentage = runif(20), Taxon = rep(1:10, by = 2) ) 来完成此操作。

首先提供一些虚假数据:

library(tidyverse)
ggplot() +
  geom_bar(data = data_bar,
           aes(x = Sample, y =Percentage, fill = Taxon),
           colour = 'white', width = 0.3, stat="identity") +
  geom_segment(data = tidyr::spread(data_bar, Sample, Percentage)
               colour = "white",
               aes(x = 1 + 0.3/2,
                   xend = 2 - 0.3/2,
                   y = cumsum(A),
                   yend = cumsum(B))) +
  theme(panel.background = element_rect(fill = "black"), # to make connecting points          
        panel.grid = element_blank())                    # show up more clearly

为了简化连接,我将数据扩展为宽格式,以便每条连接线都获得一行,其中一列与第一个Sample相关,另一列与第二个Sample相关:

BinaryArray

enter image description here