Вопрос по ggplot2, r – Как я могу иметь два различных scale_fill_manual активных в команде ggplot

8

Этот вопрос вытекает из моегоранее один о цветах фона в ggplot2.

Из ответов там я теперь могу использоватьgeom_rect чтобы дать фон для моего сюжета, который имеет пять разных цветов. Кроме того, я хотел бы нарисовать диаграмму, которая использует два разных цвета. Я могу выполнить каждую из этих задач отдельно, но когда я пытаюсь их объединить,scale_fill_manual столкновение команд.

Вот что я пытаюсь сделать:

scores = data.frame(category = 1:4, percentage = c(34,62,41,44), type = c("a","a","a","b"))
rects <- data.frame(ystart = c(0,25,45,65,85), yend = c(25,45,65,85,100), col = letters[1:5])
labels = c("ER", "OP", "PAE", "Overall")
medals = c("navy","goldenrod4","darkgrey","gold","cadetblue1")

ggplot() + 
geom_rect(data = rects, aes(xmin = -Inf, xmax = Inf, ymin = ystart, ymax = yend, fill=col), alpha = 0.3) + 
scale_fill_manual(values=medals) +
opts(legend.position="none") + 
geom_bar(data=scores, aes(x=category, y=percentage, fill=type), stat="identity") +
#scale_fill_manual(values = c("indianred1", "indianred4")) +
scale_x_continuous(breaks = 1:4, labels = labels) 

Как написано, это делает два цвета диаграммы таким же, как первые два цвета фона. Удаление & quot;#& Quot; На второмscale_fill_manual команда (предпоследняя строка) переопределяет команды цвета фона, чтобы сделать полосы желаемыми цветами, но заставляет фон иметь только два цвета, которые я хочу вbarchart.

Как я могу иметь одинscale_fill_manual Команда применяется кgeom_rect фон, а другой кgeom_bar barchart (или как можно добиться того же эффекта другими способами)?

Ваш Ответ

1   ответ
9

"a" а также"b" в обоихrects а такжеscoresтаким образом, они отображаются на один и тот же цвет. Поскольку прямоугольники кажутся значениями-заполнителями, измените их на нечто отличное, что сортирует позже, чем что-либо вscores.

rects$col <- c("Z1","Z2","Z3","Z4","Z5")

Теперь вы можете сделать одинscale_fill_manual со всеми (7) цветами.

ggplot() + 
geom_rect(data = rects, aes(xmin = -Inf, xmax = Inf, ymin = ystart, 
                            ymax = yend, fill=col), alpha = 0.3) + 
opts(legend.position="none") + 
geom_bar(data=scores, aes(x=category, y=percentage, fill=type), stat="identity") +
scale_fill_manual(values=c("indianred1", "indianred4", medals)) +
scale_x_continuous(breaks = 1:4, labels = labels) 

enter image description here

Brilliant! Спасибо. (Мне нужно было переключить медали на начало списка значений в scale_fill_manual, чтобы все получилось, как на картинке, но это сработало.) Matt Ollis

Похожие вопросы