У меня есть неокрашенный geom_col
, и я хотел бы, чтобы он отображал информацию о другой (непрерывной) переменной, отображая различные оттенки цвета в столбцах.
Пример
Начиная с geom_col
library(dplyr)
library(ggplot2)
set.seed(124)
iris[sample(1:150, 50), ] %>%
group_by(Species) %>%
summarise(n=n()) %>%
ggplot(aes(Species, n)) +
geom_col()
Предположим, мы хотим раскрасить столбцы в соответствии с тем, как низко / высоко mean(Sepal.Width)
в каждой группе
(примечание: я не знаю, есть ли способ предоставить «непрерывные» цвета для ggplot, но если нет, то лучше использовать следующие цвета)
library(RColorBrewer)
display.brewer.pal(n = 3, name= "PuBu")
brewer.pal(n = 3, name = "PuBu")
[1] "#ECE7F2" "#A6BDDB" "#2B8CBE"
Конечный результат должен быть таким же, как и выше, geom_col, но с цветными полосами в зависимости от того, насколько низко / высоко mean(Sepal.Width)
.
Примечания
- Этот ответ показывает нечто похожее, но очень ручное, и хорошо для 3 тактов, но не является устойчивым для многих графиков с большим количеством столбцов (поскольку потребуется вручную установить слишком много
case_when
условий) - Этот аналогичен, но раскраска основана на переменной уже отображается в сюжете, а не n другая переменная
- Обратите внимание, что в приведенном выше примере есть 3 столбца, и я предоставляю 3 цвета, это несколько вручную, и если есть лучший (то есть менее ручной) способ обозначения цветов, я был бы рад чтобы узнать это
Что я пробовал
Я думал, что это будет работать, но, кажется, игнорирует цвета, которые я предоставляю
library(RColorBrewer)
# fill info from: https://stackoverflow.com/questions/38788357/change-bar-plot-colour-in-geom-bar-with-ggplot2-in-r
set.seed(124)
iris[sample(1:150, 50), ] %>%
group_by(Species) %>%
summarise(n=n(), sep_mean = mean(Sepal.Width)) %>%
arrange(desc(n)) %>%
mutate(colors = brewer.pal(n = 3, name = "PuBu")) %>%
mutate(Species=factor(Species, levels=Species)) %>%
ggplot(aes(Species, n, fill = colors)) +
geom_col()