Cuando estoy trabajando en un gráfico con R (y por supuesto con ggplot2
) que voy a mostrar a otra personas siempre pierdo algo de tiempo modificando algunos de los parámetros del la función theme()
, por ejemplo, quitando el color del fondo, ocultando los marcadores en los ejes o cambiando de posición la leyenda. Si tengo que crear varios gráficos acabo copiando y pegando la misma configuración de la función theme
lo que provoca que el código sea más largo. En este post voy a explorar las posibilidades para darle otro estilo a nuestros gráficos, ya sea creando nosotros los temas o utilizando otros temas disponibles.
Creacción de una función personalizada
Descubrí otro post donde hablaban de crear sus propios temas personalizados lo cual me pareció muy interesante. Hasta entonces, era consciente de que habían varios temas implementados en el paquete ggplot2
como el theme_bw
que es muy útil cuando quieres un fromato sin el fondo gris como el que viene por defecto. Pero no sabía que los temas eran en esencia modificaciones del tema por defecto, en este caso theme_grey
.
theme_bw
## function (base_size = 11, base_family = "", base_line_size = base_size/22,
## base_rect_size = base_size/22)
## {
## theme_grey(base_size = base_size, base_family = base_family,
## base_line_size = base_line_size, base_rect_size = base_rect_size) %+replace%
## theme(panel.background = element_rect(fill = "white",
## colour = NA), panel.border = element_rect(fill = NA,
## colour = "grey20"), panel.grid = element_line(colour = "grey92"),
## panel.grid.minor = element_line(size = rel(0.5)),
## strip.background = element_rect(fill = "grey85",
## colour = "grey20"), legend.key = element_rect(fill = "white",
## colour = NA), complete = TRUE)
## }
## <bytecode: 0x00000000127b2910>
## <environment: namespace:ggplot2>
Utilizando la definición de la función anterior como base, podemos definir nuestro theme_custom
. Comenzamos con el tema theme_classic
como base, pero vamos a definir un tamaño de letra y una fuente específica. Tal y como esta definido, el tema ya funcionaría aunque la personalización es muy limitada.
theme_custom <- function () {
theme_classic(base_size = 10, base_family = "Bahnschrift")
}
Para modificar el resto de parámetros en el tema, debemos incluir el comando %+replace%
junto con la función theme
. Ya dentro de esta última función utilizamos los parametros habituales p. ej. panel.background
, legend.key
, panel.grid.major
, etc.
theme_custom <- function () {
theme_classic(base_size = 10, base_family = "Bahnschrift") %+replace%
theme(
panel.background = element_blank(),
plot.background = element_rect(fill="#F8F8F8", colour=NA),
legend.background = element_rect(fill="transparent", colour=NA),
legend.key = element_rect(fill="transparent", colour=NA),
legend.position="bottom"
)
}
Resultado
Un vez tenemos nuestro tema podemos comenzar a aplicarlo. En la Figura 1 vemos el resultado del gráfico con el tema por defecto y el la Figura 2 el resultado con el theme_custom
.
data(mtcars)
consumo_potencia <- mtcars %>%
ggplot(aes(mpg, hp, color = cyl)) +
geom_point(size = 3) +
labs(title = "Consumo (millas/galón) por la potencia del vehículo",
x = "Caballos de potencia",
y = "Consumo (millas/galón)",
color = "Num. cilindros")
consumo_potencia
consumo_potencia + theme_custom()
Utilizar otros temas en ggplot2
Si no queremos estar definiendo nosotros mismos los temas. También podemos recurrir al paquete ggthemr
o al paquete hrbrthemes
que nos permite aplicar otros temas creados por el desarrollador.
El paquete hrbrthemes
Este paquete creado/mantenido por Bob Rudis nos proporciona una serie de funciones para darle un estilo diferente a nuestros gráficos en ggplot2
. Aquí dejo un ejemplo del resultado.
# Para instalar el paquete desde GitHub
# devtools::install_github("hrbrmstr/hrbrthemes")
consumo_potencia +
hrbrthemes::theme_ipsum()
El paquete ggthemr
La peculiaridad de este paquete es que no se utilizan como los otros temas sino que se aplican estilos por defecto. Para activarlos, debemos ejecutarlos antes del código de nuestro gráfico. A continuación os dejo un ejemplo:
# 1. Primero debemos definir que tema queremos.
# Puedes ver todos los temas disponibles en el repositorio del paquete: https://github.com/cttobin/ggthemr
ggthemr::ggthemr('camouflage')
# 2. Y a continuación ejecutar el gráfico.
consumo_potencia
Para resetear el tema y volver al original debemos utilizar el comando ggthemr_reset()
.
Recientemente ha aparecido otro paquete
Conclusión
Para darle un estilo más personal a nuestro gráficos podemos utilizar temas predefinidos en paquetes como los de hrbrthemes
, ggthemr
o crear nosotros mismos los temas como si fueran funciones.