Настройка яркости для цветовых поддонов, определенных вручную, в ggplot2

У меня есть пользовательская цветовая палитра, которую я хотел бы использовать для графика geom_bar. Однако я также хотел бы установить яркость этих цветов вручную. Когда я запускаю функции scale_fill_manual() и scale_fill_hue() вместе в своем коде ggplot, я получаю следующую ошибку:

Scale for 'fill' is already present. Adding another scale for 'fill', which will replace the existing scale.

Кажется, что одна функция "scale_fill" перекрывает другую. Казалось логичным установить яркость в функции scale_fill_manual(), например:

scale_fill_manual(values=cbPalette, l = 55)

Но это не работает.

Заранее спасибо за помощь! Вот версия рисунка без правильно установленной яркости (ниже приведены данные и код): Эта цифра является версией без яркости, установленной на 55

> Sex_age_survival
Sex       age        estimate        lcl       ucl
Female    Adult     0.6826927 0.62881160 0.7320849
Male      Adult     0.6941044 0.64680030 0.7376429
Female    Juvenile  0.4062997 0.27163540 0.5566986
Male      Juvenile  0.5270193 0.39998360 0.6506502
Female    Chick     0.4296511 0.30855270 0.5394149
Male      Chick     0.3987215 0.25969601 0.5252046
Salina    Nest      0.5643484 0.52096067 0.6054399
Marsh     Nest      0.1434720 0.04435806 0.3013856

limits <- aes(ymin = lcl, ymax = ucl)
dodge <- position_dodge(width=0.7)
cbPalette <- c("#E69F00", "#009E73", "#CC0000", "#0066CC")

Sex_age_plot2 <- ggplot(Sex_age_survival, aes(fill = Sex, x = age, y = estimate)) + 
  theme_bw() +
  geom_bar(width = 0.7, position = "dodge", stat = "identity") +
  geom_errorbar(limits, position = dodge, width=0.2, size = .6, shape = 1) +
  theme(text=element_text(size = 16, family = "Candara"),
    legend.text = element_text(size = 30),
    legend.title = element_text(size = 30),
    axis.title.x = element_text(size = 35, vjust = -0.1),
    axis.text.x  = element_text(size = 30), 
    axis.title.y = element_text(size = 35, vjust = 1.2),
    axis.text.y  = element_text(size = 30), 
    panel.grid.major = element_blank()) +
  xlab("Life stage") + 
  ylab("Apparent survival (± 95% CI)") +
  scale_y_continuous(limits = c(0, 1)) +
  scale_fill_hue(l = 55) + # seems like I cannot run this in addition to scale_fill_manual()
  scale_fill_manual(values=cbPalette) # seems like I cannot run this in addition to scale_fill_hue()
Sex_age_plot2

1 ответ

Решение

Вы не можете комбинировать такие масштабы в ggplot2: вместо этого вам нужно будет выполнить манипулирование цветом вручную:

library(colorspace)

pal <- c("#E69F00", "#009E73", "#CC0000", "#0066CC")

hcl <- coords(as(hex2RGB(pal), "polarLUV"))
hcl[, "L"] <- 55

pal2 <- hex(polarLUV(hcl), fixup = TRUE)

plot(rep(1:4, 2), rep(1:2, each = 4), pch = 20, cex = 5, col = c(pal, pal2))

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

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