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"))
) и распределяет между ними цвета из цветовой шкалы.