Я пытаюсь решить простую проблему, я хочу показать в долларовом выражении, как доходы, расходы и маржа взносов будут выглядеть через несколько лет.
Однако при использовании 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 бизнес-единицам, поэтому площадь недвижимости очень ограничена, и она должна выглядеть красиво и красиво, отсюда и мой запрос.
Используйте geom_col
. Это сокращение от geom_bar(..., stat = "identity")
@Relasta - Я обновил свой вопрос на основе ваших отзывов.
Мне кажется, что маржа вклада - это всегда сумма доходов + расходов?
Если это так, просто построение графика доходов и расходов создаст столбик с накоплением, а высота всей полосы будет указывать на маржу вклада.
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")
Но я также думаю, что не совсем понимаю ваш вопрос. Не могли бы вы набросать, как должна выглядеть окончательная диаграмма?
Когда вы спрашиваете: «Таким образом, пространство для недвижимости очень ограничено, и оно должно выглядеть красиво и красиво» - вы хотите, чтобы сам код был короче / аккуратнее? Или ваша диаграмма должна вместить все 10 бизнес-единиц и данные за 7 лет в одну цифру? В этом случае вы можете использовать facet_wrap("unit")
- при условии, что ваш столбец, идентифицирующий бизнес-единицы, называется unit
- для создания 10 небольших графиков на одной диаграмме. Чтобы сделать его эстетически «красивым и красивым», я бы посмотрел на Тематические возможности ggplot.
Это делает то, что вы хотите?
geom_bar(aes(x = type, y = value, fill = Header), stat = "identity", position = "dodge")