ggplot2: цвет geom_smooth с scale_colour_brewer

Я создал простой график, используя geom_smooth:

test.dat <- data.frame(matrix(c(runif(20, 0, 20)), 10, 2))
names(test.dat) <- c("x", "y")

test.plot <- ggplot(test.dat, aes(x,y)) + geom_point() + 
                    geom_smooth(method="loess")

Полученная линия по умолчанию синего цвета. Я могу изменить его вручную до заданного цвета, добавив это:

test.plot + geom_smooth(method="loess", colour="black")

Тем не менее, я хотел бы основывать выбор цвета на палитре, которую я использовал для серии графиков. Обычно этого можно достичь, добавив соответствующую строку:

scale_colour_brewer(type = "div", palette = "Spectral")

Тем не менее, это не имеет никакого эффекта (равно как и использование scale_fill_brewer). Я нашел некоторое обсуждение поведения geom_smooth с цветом здесь, но нет очевидного решения этой конкретной проблемы. Какие-либо предложения?

1 ответ

Решение

Ты можешь использовать:

test.plot + 
  geom_smooth(aes(colour=TRUE), method="loess") + 
  scale_colour_brewer(type = "div", palette = "Spectral")

Ключевым моментом является использование colour внутри mapping аргумент geom_smooth (aes часть). Неважно, какое значение вы используете, оно просто должно отличаться от любых других значений, которые вы используете для указания других цветов линий на графике.

Вот более полный пример:

set.seed(1)
test.dat <- data.frame(
  x=runif(20), y=runif(20), 
  z=sample(letters[1:2], 20, rep=T)
)

ggplot(test.dat, aes(x, y, colour=z)) + 
  geom_smooth(aes(colour="d"), method="loess") +
  geom_point() +
  geom_line() +
  scale_colour_brewer(type = "div", palette = "Spectral")

Обратите внимание, как мы можем получить geom_smooth участвовать в цветовой шкале, добавляя новое отдельное значение ('d') к существующим значениям цвета ('a', 'b'). Ggplot собирает все значения, которые назначены colour эстетическое картирование (в данном случае unique(c(test.dat$z, "d"))) и распределяет между ними цвета из цветовой шкалы.

Другие вопросы по тегам