geom_bar如何使多个系列不叠加

时间:2018-05-01 09:18:49

标签: r ggplot2 bar-chart

我正在尝试解决一个简单的问题,我希望以美元计算显示多年来的收入,费用和保证金利润率。

但是,使用geom_bar,值会叠加在一起。

如何在收入栏中绘制费用和保证金。现在,我知道我可以找到每个类别和情节之间的净差异,但我很懒,想知道是否有一个更有效的过程(当然哈德利一定想到这个)

到目前为止我的工作:

library(tidyverse)

df <- data.frame(stringsAsFactors=FALSE,
              Header = c("Income", "Expenses", "Contribution Margin"),
              FY15 = c(100L, 60L, 40L),
              FY16 = c(110L, 70L, 40L),
              FY17 = c(120L, 80L, 40L)
      )


df %>%
  gather(type, value, -Header) %>%
  mutate(type = factor(type, levels = c("FY15", "FY16", "FY17"))) %>%
  ggplot() +
  geom_bar(aes(x = type, y = value, fill = Header), stat = "identity")

抱怨第一次不清楚,我想要的输出是:

df %>%
  gather(type, value, -Header) %>%
  spread(Header, value) %>%
  mutate(Expenses = Expenses - `Contribution Margin`,
         Income   = Income - (Expenses + `Contribution Margin`)) %>%
  gather(Header, value, -type) %>%
  mutate(type = factor(type, levels = c("FY15", "FY16", "FY17"))) %>%
  ggplot() +
  geom_bar(aes(x = type, y = value, fill = Header), stat = "identity")

但是,我想避免上面重新计算。我需要提供这些信息超过7年,并为大约10个业务单位,所以房地产空间非常有限,它必须看起来漂亮和漂亮,因此我的要求。

1 个答案:

答案 0 :(得分:0)

在我看来,贡献保证金总是收入+费用的总和?

如果是这样,只需绘制收入和费用即可创建一个堆积条,整个条形图的高度将表示贡献保证金。

df %>%
  gather(type, value, -Header) %>%
  mutate(type = factor(type, levels = c("FY15", "FY16", "FY17"))) %>%
  filter(Header != "Contribution Margin") %>%
  ggplot() +
  geom_bar(aes(x = type, y = value, fill = Header), stat = "identity")

但我也认为我并不是真的了解你的问题。你能勾勒出你想要最终图表的样子吗?