Cómo cambiar el color de un gráfico en ggplot

Una de las características más destacables de un gráfico y que primero llama la atención es el color. En el día 11 del Calendario de adviento 2021, trabajaremos con las funciones que nos permiten modificar el color en un gráfico de ggplot en R.

Primero, partimos del gráfico base con el que venimos trabajando hasta ahora, al que le hemos cambiado los títulos, las facetas y eliminado la leyenda.

library(ggplot2)
library(showtext)
font_add_google('Anton')

msleep$vore <- as.factor(msleep$vore)
levels(msleep$vore) <- c('carnívoro', 'herbívoro', 'insectívoro', 'omnívoro')

ggplot(msleep, aes(x=sleep_total, y=sleep_rem, color=vore)) +      
  geom_point() + 
  labs(title='El sueño de los mamíferos', 
       subtitle='Sueño REM frente a las horas totales de sueño', 
       caption='Proceedings of the National Academy of Sciences, 104 (3):1051-1056, 2007',
       x='Horas de sueño en total', y='Horas de sueño en fase REM') + 
  theme(legend.position='none',
        plot.title=element_text(family='Anton', size=20),
        plot.subtitle=element_text(family='Anton'),
        axis.title.x = element_text(family='Anton', face='bold', hjust=1),
        axis.title.y = element_text(family='Anton', face='bold', hjust=1),
        strip.text=element_text(family='Anton', face='bold', size=14, hjust=0, color='white'),
        strip.background=element_rect(fill='black')) +
  facet_wrap('vore') -> p
p

Modificar el color independientemente de las variables

Para modificar el color de los puntos del gráfico independientemente de las variables, podemos indicarlo directamente en la función de la geometría, en este caso, geom_point(). El valor del atributo color será el nuevo color de todos los puntos del gráfico.

La forma de especificarlo puede ser el nombre del color o su valor en hexadecimal.

p + geom_point(color='red')

Modificar el color asociado a una variable

Por otro lado, si el color depende de una variable, en la función aes() especificaremos de qué variable se trata en el argumento color.

geom_point(aes(color='variable'))

Como vemos, se requiere de alguna otra función extra para poder indicar la paleta de colores que deseamos utilizar. Existen dos posibilidades: Una, que la paleta sea predeterminada o bien, que la paleta sea definida manualmente. A continuación, veremos cada caso detalladamente.

Añadir una paleta de colores predeterminada

Antes de añadir una paleta de colores, nos preguntaremos qué tipo de paleta necesitamos. Existen tres tipos diferentes: divergente, cualitativa o secuencial. Como ya vimos en el post sobre las 7 librerías de colores de R que deberías conocer estas son las características de cada una de ellas:

  • La paleta cualitativa se emplea para datos categóricos sin ordenación

  • La paleta secuencial para información numérica continua o categórica ordenada

  • La escala divergente para variables numéricas que, desde un valor neutro, divergen hacia dos extremos

En este caso, elegimos una paleta cualitativa puesto que la variable clasificación según alimentación es categórica.

Posteriormente, vamos a ver cuál de las librerías nos conviene más usar. Ggplot, por defecto, ofrece las disponibles en Color Brewer, pero ya sabemos que existen muchas otras opciones.

Para visualizar las paletas disponibles lo podemos hacer de la siguiente manera:

library(RColorBrewer)
display.brewer.all()

Elegimos la paleta Set2 y lo indicamos así en ggplot:

p + scale_color_brewer(palette='Set2') 

Ten en cuenta que si en vez de trabajar con el color, modificásemos el relleno o fill, la función equivalente sería scale_fill_brewer().

Si preferimos trabajar con otra de las librerías mencionadas en el post anteriormente citado, simplemente necesitaríamos cambiar brewer por el nombre de la nueva librería. Por ejemplo, para utilizar la librería de Carto scale_color_carto_c() o scale_color_carto_d(), dependiendo si la variable es continua o discreta respectivamente.

library(rcartocolor)
p + scale_color_carto_d(palette='Pastel', na.value = '#111111')

Nota: Hemos especificado en este caso el color para los valores NA ya que el color por defecto que proporciona la libraría rcartocolor es demasiado similar al fondo del gráfico.

Añadir una paleta de colores manualmente

Para añadir la paleta de colores manualmente, utilizamos scale_color_manual(). El argumento values nos permitirá indicar cuáles son los valores concretos que queremos asociar a la variable. Recordemos que debemos indicar el mismo número de colores que de categorías de la variable.

p + scale_color_manual(values=c('#DCB0F2','#87C55F','#9EB9F3','#FE88B1','#C9DB74')) 
## Warning: Removed 22 rows containing missing values (geom_point).

En caso de una variable continua, utilizaríamos scale_color_gradient(), indicamos el mínimo, con el argumento low y el máximo con el argumento high.

En resumen…

  • geom_point(color='red') para cambiar el color de todos los puntos de gráfico

  • scale_color_brewer() para modfiicar una paleta de colores de Color Brewer

  • scale_color_carto_c()/_d() para elegir una paleta de colores de Carto Color

  • scale_color_manual() para indicar manualmente los colores

  • scale_color_gradient() para indicar manualmente los colores en caso continuo

Paula L. Casado
Paula L. Casado
Data Scientist

Científica de datos especializada en visualización de datos.

Relacionado