У меня есть data.frame
, что-то вроде следующего:Изменение цветовых схем между гранями
set.seed(100)
df <- data.frame(year = rep(2011:2014, 3),
class = rep(c("high", "middle", "low"), each = 4),
age_group = rep(1:3, each = 4),
value = sample(1:2, 12, rep = TRUE))
и я ищу, чтобы произвести, по facet
-ную (по переменной age_group
) три участка, которые выглядят аналогично тем, которые получают по следующему коду:
library(ggplot2)
blue <- c("#bdc9e1", "#74a9cf", "#0570b0")
ggplot(df) + geom_bar(aes(x = year, y = value,
fill = factor(class, levels = c("high", "middle", "low"))),
stat = "identity") +
scale_fill_manual(values = c(blue)) +
guides(fill = FALSE)
Однако, когда каждый фасет имеет другую цветовую схему, где все цвета указаны мной.
кажется нужен более конкретным вариант того, что происходит здесь: ggplot2: Change color for each facet in bar chart
Таким образом, используя данные, которые я предоставил, я ищу, чтобы получить три фасета-эда участков, расщепленных age_group
где заполнения дается в каждом графике на уровне class
, и все цвета (всего 9) будут указаны вручную самим.
Edit: Для разъяснения, фасета, что я хотел бы, чтобы в конечном итоге действительно обеспечивается следующим кодом:
ggplot(df) + geom_bar(aes(x = year, y = value,
fill = factor(class, levels = c("high", "middle", "low"))),
stat = "identity") +
scale_fill_manual(values = c(blue)) +
guides(fill = FALSE) +
facet_wrap(~ age_group)
с дополнительным уровнем контроля цвета подмножества по переменной class
.
Это по большей части очень приятный и воспроизводимый вопрос (хорошая работа!), Но мне нужна пара разъяснений. (a) Я удивлен, что ваш примерный сюжет * не включает фасет, который вы хотите ... просто добавляет '+ facet_wrap (~ age_group)', что вы имели в виду? Возможно, включите это в свой пример. (b) Что вы имеете в виду для легенды? Единственная легенда со всеми взаимодействиями по возрасту/классу? Или отдельная легенда для каждого подзаголовка? – Gregor
Я добавил последний фасет, который хотел бы задать в моем вопросе выше. Вы правы, полагая, что я просто хотел бы включить 'facet (~ age_group)'. Ваша мысль о легенде интересна, я об этом не думал. Какой-то легенда, где я мог бы иметь три цвета в блоках, соответствующих уровням «высокий», «средний» и «низкий», было бы неплохо, но я полагаю, что это выходит за рамки контроля ggplot. Я бы приветствовал предложения. – Ross
У меня [этот старый вопрос] (http://stackoverflow.com/q/20129299/903061) о создании «сетчатых» легенд в системе «сетка» - вы, вероятно, могли бы его адаптировать. Что касается цветов, я бы просто добавил столбец к вашим данным, который представляет собой комбинацию класса и age_group, а затем заполнить их (используя «вставку» или «взаимодействие» для создания нового столбца). У меня нет времени написать хороший ответ, но я попытаюсь найти время позже, если никто другой не сделает это первым. – Gregor