Ответ 1
Цвета по умолчанию - это равномерно распределенные оттенки вокруг цветового круга. Вы можете проверить, как это происходит от здесь.
Вы можете использовать scale_fill_manual
с этими цветами:
p + scale_fill_manual(values=c("#F8766D", "#00BA38"))
Здесь я использовал ggplot_build(p)$data
из cyl
, чтобы получить цвета.
В качестве альтернативы вы также можете использовать другую палитру:
p + scale_fill_brewer(palette="Set1")
И чтобы найти цвета в палитре, вы можете сделать:
require(RColorBrewer)
brewer.pal(9, "Set1")
Проверьте пакет, чтобы узнать палитры и другие параметры, если вам интересно.
Изменить: @user248237dfsf, как я уже указывал в ссылке вверху, эта функция из @Andrie показывает генерируемые цвета:
ggplotColours <- function(n=6, h=c(0, 360) +15){
if ((diff(h)%%360) < 1) h[2] <- h[2] - 360/n
hcl(h = (seq(h[1], h[2], length = n)), c = 100, l = 65)
}
> ggplotColours(2)
# [1] "#F8766D" "#00BFC4"
> ggplotColours(3)
# [1] "#F8766D" "#00BA38" "#619CFF"
Если вы посмотрите на два генерируемых цвета, первый из них один и тот же, но второй цвет не тот, когда n = 2 и n = 3. Это происходит потому, что он генерирует цвета равномерно распределенных оттенков. Если вы хотите использовать цвета для cyl
для vs
, тогда вам нужно будет установить scale_fill_manual
и использовать эти цвета, сгенерированные с помощью n = 3 из этой функции.
Чтобы убедиться, что это действительно то, что вы могли бы сделать:
p1 <- ggplot(mtcars, aes(factor(cyl), mpg)) +
geom_boxplot(aes(fill = factor(cyl)))
p2 <- ggplot(mtcars, aes(factor(cyl), mpg)) +
geom_boxplot(aes(fill = factor(vs)))
Теперь, если вы это сделаете:
ggplot_build(p1)$data[[1]]$fill
# [1] "#F8766D" "#00BA38" "#619CFF"
ggplot_build(p2)$data[[1]]$fill
# [1] "#F8766D" "#00BFC4" "#F8766D" "#00BFC4" "#F8766D"
Вы видите, что это цвета, которые генерируются с использованием ggplotColours
, и причина разницы также очевидна. Надеюсь, это поможет.