【问题标题】:How to produce stacked bars within grouped barchart in R [duplicate]如何在R中的分组条形图中生成堆叠条[重复]
【发布时间】:2013-09-17 10:50:31
【问题描述】:

我有以下图表

test  <- data.frame(person=c("A", "B", "C", "D", "E"), 
                    value1=c(100,150,120,80,150),     
                    value2=c(25,30,45,30,30) , 
                    value3=c(100,120,150,150,200)) 

我想为每个人绘制一个分组条形图(水平),其中一个条表示 value1,另一个条表示 value2 和 value3 的堆栈。有没有办法使用ggplot2来做到这一点?我可以使用构面将这些单独的图表一个一个地绘制在另一个之下吗?

【问题讨论】:

  • 欢迎来到 SO。请分享您迄今为止尝试过的内容以及它是如何奏效的。这不是一个可以要求我们为您生成代码的地方。相反,尝试一些事情并提出一个关于您的代码的问题以及它是如何工作的或不工作的。
  • 否决评论:研究工作很少。
  • @SeñorO - 你知道我不是原始问题的作者,不是吗?我刚刚编辑了它
  • 这个问题和答案与我的问题的相关性远远超过这个问题据称重复的问答。此外,我认为@VictorK 的解释更容易理解。

标签: r charts ggplot2 bar-chart


【解决方案1】:

这是我想出的,类似于此处提出的解决方案:stacked bars within grouped bar chart

  1. 融化data.frame并添加一个新列cat

    library(reshape2) # for melt
    
    melted <- melt(test, "person")
    
    melted$cat <- ''
    melted[melted$variable == 'value1',]$cat <- "first"
    melted[melted$variable != 'value1',]$cat <- "second"
    
  2. 绘制堆积图catvalue,由person 分面。您可能需要调整标签以获得您想要的:

    ggplot(melted, aes(x = cat, y = value, fill = variable)) + 
      geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ person)
    

【讨论】:

  • 这是一个很棒的情节!有没有办法改变它,例如,值 2 也可以堆叠到“第一个”条形图上?我有一个类似的情节,其“值”包含在“第一”和“第二”中,我不知道如何将其添加到情节而不在图例上制作冗余标签
  • 一定很喜欢 ggplot 制作漂亮的图表是多么容易。我介绍了创建堆叠/分组条形图here
  • geom_col() 还绘制了一个图,其中条形的高度表示数据中的值。对于geom_col,无需指定stat = 'identity'。要生成上面的图:ggplot(melted, aes(x = cat, y = value, fill = variable)) + geom_col() + facet_grid(~ person).
  • 但是如何为不同的集群使用相同的标签/变量。意味着您有多个集群的(first - (var1,var2), second - (var1,var2))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 2016-11-30
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
相关资源
最近更新 更多