Как можно сделать столбчатую диаграмму с накоплением таким образом, чтобы он имел разные цвета для каждого сегмента каждого столбца с накоплением (т.е. столько уникальных цветов, сколько общее количество сегментов по всем столбцам - в данном случае 7 разных цветов).
Я пробовал подходы здесь , но получаю разные результаты из-за разного формата входных данных, и этот вопрос показывает итоги и не требует легенды (мне нужна легенда).
MRE + попытки на данный момент
library(tidyverse)
df <- structure(list(discipline = c("Dev Ops", "Dev Ops", "Dev Ops",
"Dev Ops", "Data Engineering", "Data Engineering", "Data Engineering"
), work_type = c("Casual/Vacation", "Contract/Temp", "Full Time",
"Part Time", "Casual/Vacation", "Contract/Temp", "Full Time"),
n = c(3L, 117L, 581L, 9L, 1L, 297L, 490L)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -7L))
# A tibble: 7 x 3
discipline work_type n
<chr> <chr> <int>
1 Dev Ops Casual/Vacation 3
2 Dev Ops Contract/Temp 117
3 Dev Ops Full Time 581
4 Dev Ops Part Time 9
5 Data Engineering Casual/Vacation 1
6 Data Engineering Contract/Temp 297
7 Data Engineering Full Time 490
Это дает правильную диаграмму с накоплением столбцов, но с одинаковыми цветами для обоих столбцов с накоплением
df %>%
ggplot(aes(x = discipline, y = n, fill = work_type)) +
geom_col(position = "Stack")
Это применяет уникальные цвета к каждому составному столбцу, но применяет тот же к обоим уложенным столбцам
cols <- c("#5E4FA2", "#5E4FA2CC", "#5E4FA299", "#5E4FA266", "#9E0142",
"#9E0142CC", "#9E014299")
df %>%
ggplot(aes(x = discipline, y = n, fill = work_type)) +
geom_col(position = "Stack") +
scale_fill_manual(values = cols[1:4])
Это позволяет получить разные цвета для обеих составных полос, но неправильные цвета (и неправильная легенда)
df %>%
ggplot(aes(x = discipline, y = n, fill = cols)) +
geom_col(position = "Stack")
Это основано на этот подход , но обратите внимание, что высота столбцов соответствует сумме для всех столбцов (а не для каждого столбца), а также имеет одинаковые цвета в обоих столбцах, расположенных друг над другом.
df %>%
pivot_longer(cols = discipline:work_type) %>%
ggplot(aes(x = name, y = n)) +
geom_col(fill = c(cols, cols))