我正在尝试解决一个简单的问题,我希望以美元计算显示多年来的收入,费用和保证金利润率。
但是,使用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个业务单位,所以房地产空间非常有限,它必须看起来漂亮和漂亮,因此我的要求。
答案 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")
但我也认为我并不是真的了解你的问题。你能勾勒出你想要最终图表的样子吗?