Como Alterar as Cores de um Gráfico Feito no ggplot2

Introdução

Recentemente, respondi a pergunta “Como alterar a escala de cores em um gráfico no R” no Stack Overflow em Português. Achei que a resposta ficou bem completa, então resolvi transpô-la para cá.

Há duas maneiras principais de definir uma escala de cores usando ggplot2. Uma delas é manual e outra é utilizando uma paleta de cores pré-definida.

Definindo cores manualmente

Cada cor deve ser definida manualmente. Essa definição pode ser feita via código (RGB ou hexadecimal) das cores ou pelo seu nome em inglês. A definição via código permite uma variação maior de cores, pois nem todas elas possuem nomes definidos. Se a definição for feita via nome de cores, estes nomes devem estar em inglês. Abaixo eu criei uma escala de cores, que não é necessariamente bonita ou harmoniosa, que permite ver isso em detalhes:

# devtools::install_github("allisonhorst/palmerpenguins")
library(palmerpenguins)
library(ggplot2)
theme_set(theme_bw())

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g, colour = species)) +
  geom_point() +
    scale_colour_manual(values = c("orange", "seagreen3", "cyan")) +
  labs(x = "Comprimento da Nadadeira (mm)", y = "Massa Corporal (g)", title = "Pinguins na Estação Palmer", colour = "Espécie")
## Warning: Removed 2 rows containing missing values (geom_point).

O R já vem com 657 cores pré-definidas em sua instalação. Seus nomes podem ser consultados através da função colors().

Definindo cores através de paletas

Basta usar a função scale_colour_brewer para definir uma paleta de cores para o seu gráfico. No exemplo abaixo estou utilizando a paleta Dark2:

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g, colour = species)) +
  geom_point() +
  labs(x = "Comprimento da Nadadeira (mm)", y = "Massa Corporal (g)", title = "Pinguins na Estação Palmer", colour = "Espécie") +
    scale_colour_brewer(palette = "Dark2")
## Warning: Removed 2 rows containing missing values (geom_point).

Entre no help da função scale_colour_brewer para ver quais são as paletas de cores disponíveis no ggplot2.

Entretanto, de uns anos pra cá, eu tenho usado uma outra paleta de cores para os meus gráficos. Ela se chama viridis e suas cores são facilmente distinguíveis por daltônicos. Como sou professor, tenho a preocupação de que meus gráficos sejam mais inclusivos e, com ela, meus alunos conseguem diferenciar o que aparece nos gráficos. Além disso, essa escala funciona muito bem em impressões em preto e branco, ao contrário de algumas outras opções de paletas.

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g, colour = species)) +
  geom_point() +
  labs(x = "Comprimento da Nadadeira (mm)", y = "Massa Corporal (g)", title = "Pinguins na Estação Palmer", colour = "Espécie") +
    scale_fill_viridis_d()
## Warning: Removed 2 rows containing missing values (geom_point).

Paletas não-oficiais

Por fim, há paletas de cores não-oficiais, feitas por usuários do R que tem mais noção de teoria de cor do que eu. Uma opção que gosto muito é baseada nas paletas de cores dos filmes do cineasta Wes Anderson e pode ser baixada [aqui][4]. Sua utilização também é simples e combina os dois métodos vistos anteriormente:

library(wesanderson)
ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g, colour = species)) +
  geom_point() +
  labs(x = "Comprimento da Nadadeira (mm)", y = "Massa Corporal (g)", title = "Pinguins na Estação Palmer", colour = "Espécie") +
    scale_colour_manual(values = wes_palette("Zissou1"))
## Warning: Removed 2 rows containing missing values (geom_point).

Acima criei um gráfico de barras baseado nas cores de [A Vida Marinha com Steve Zissou][6], um dos meus filmes preferidos.


Observação: tudo o que foi dito acima para cores de pontos e linhas (colour) pode ser transposto para preenchimentos (fill). Ou seja, basta substituir scale_colour_brewer por scale_fill_brewer em um gráfico de colunas para obter um resultado análogo.


comments powered by Disqus