Подтвердить что ты не робот

Изменение цветов фактора ggplot?

Я замечаю, что здесь Ящик и усы закладывают вызов:

p + geom_boxplot(aes(fill = factor(cyl)))

создает яркие красные/зеленые/синие цвета для заполнения ящиков, а:

p + geom_boxplot(aes(fill = factor(vs)))

Создает отчетливый бледно-зеленый/красный цвет. В моих данных, я получаю второй набор цветов, но хотел бы первый набор (например, в

p + geom_boxplot(aes(fill = factor(cyl)))

что контролирует, какой набор цветов ggplot использует и как вы можете его изменить?

Спасибо

4b9b3361

Ответ 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, и причина разницы также очевидна. Надеюсь, это поможет.

Ответ 2

Добавление к предыдущим ответам:

При использовании col эстетического (вместо fill) используйте scale_color_manual. Это полезно для geom_point():

myColors <- c("#56ddc5", "#ff3db7", "#4699dd")
ggplot(mtcars, aes(x=mpg, y=hp, col=as.factor(cyl))) + 
  geom_point() +
  scale_color_manual(values=myColors)

введите описание изображения здесь