如果条形图的名称categorial为character,如何使用geom_bar连接堆叠的条形图比例

如果条形图的名称categorial为character,如何使用geom_bar连接堆叠的条形图比例,r,ggplot2,tidyr,geom-bar,R,Ggplot2,Tidyr,Geom Bar,这是对已找到问题的先前答案的扩展 简要使用以下示例代码生成堆叠条形图,其中线连接两组之间的每个条形比例: library(ggplot2) 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) ) l

这是对已找到问题的先前答案的扩展

简要使用以下示例代码生成堆叠条形图,其中线连接两组之间的每个条形比例:

library(ggplot2)
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(tidyr)
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())   
库(ggplot2)
种子集(0)
数据条
  • 问题在于,您的
    cumsum
    med处于错误的“方向”或顺序,即您在
    BC.1
    开始
    cumsum
    ming,而在条形图中它位于顶部。这可以通过在累积之前重新排列数据集来解决。因此,在我看来,最好在绘图代码之外执行此操作,以便轻松检查数据

  • 要在底部获得另一个
    geom_段
    ,只需在数据中添加一行即可

  • 库(tidyverse)
    测试矩阵%
    添加行(y=0,yend=0)
    ggplot()+
    几何图形(数据=测试矩阵,
    aes(x=Var2,y=Freq,fill=Var1),
    颜色=黑色,宽度=0.3,stat=“identity”)+
    geom_段(数据=test.matrix.wide,
    color=“黑色”,
    aes(x=1+0.3/2,
    xend=2-0.3/2,
    y=y,
    是的+
    刻度填充手册(数值=c('BC.1'=黄金,'BC.2'=黄绿色,'GC'=海军蓝,'MO'=皇家蓝,'EB'=橙色”))+
    主题(panel.background=element\u rect(fill=“white”),panel.grid=element\u blank()
    

    太棒了!感谢stefan的解决方案
    test.matrix<-matrix(c(70,120,65,140,13,68,46,294,52,410),ncol=2,byrow=TRUE)
    rownames(test.matrix)<-c("BC.1","BC.2","GC","MO","EB")
    colnames(test.matrix)<-c("12m","3m")
    test.matrix <- data.frame(test.matrix)
    
    ggplot() +
      geom_bar(data = test.matrix,
               aes(x = Var2, y =Freq, fill = Var1),
               colour = 'black', width = 0.3, stat="identity") +
      geom_segment(data = tidyr::spread(test.matrix, Var2, Freq),
                   colour = "black",
                   aes(x = 1 + 0.3/2,
                       xend = 2 - 0.3/2,
                       y = cumsum(`12m`),
                       yend = cumsum(`3m`))) +
      scale_fill_manual(values=c('BC.1'="gold",'BC.2'="yellowgreen",'GC'="navy",'MO'="royalblue",'EB'="orangered")) +
      theme(panel.background = element_rect(fill = "white"), panel.grid = element_blank())