Personalizar fuentes en R
Cuando creas gráficos en R puedes especificar la familia de la fuente. Las fuentes integradas en R son sans (Arial), serif (Times New Roman), mono (Courier) y symbol (Standard Symbols L). Sin embargo, esposible personalizar las fuentes en R añadiendo otras con los paquetes extrafont
y showtext
.
El paquete extrafont
El paquete extrafont
permite añadir fuentes True Font Type (.ttf
) en R de manera sencilla. Antes de cargar el paquete recomendamos instalar todas las fuente que quieras en tu sistema. Para ello, descárgalas e instálalas haciendo click derecho – Instalar para todos los usuarios.
Importando las fuentes del sistema
Una vez hayas instalado las fuentes deseadas lo primero que debes hacer tras instalar el paquete será ejecutar la función font_import
, que importará todas las fuentes .ttf
de tu sistema.
# install.packages("extrafont")
library(extrafont)
# Importa todos los archivos .ttf de tu sistema
# Tendrás que ejecutar esto una vez, pero tardará unos minutos en acabar
font_import()
Tras ejecutar la función anterior podrás ver una lista de todas las fuentes personalizadas disponibles en R en orden alfabético ejecutando fonts()
.
# Muestra la lista completa
# fonts()
# Solo las seis primeras fuentes
head(fonts())
[1] "Agency FB" "Alba Matter" "Alba Super"
[4] "Algerian" "Alte Haas Grotesk" "Arial Black"
Ahora comprueba si todas las fuentes que quieres usar están en la lista. Si no es así, recomendamos el siguiente procedimiento:
-
Copia los archivos
.ttf
de las fuentes faltantes y pégalos en una carpeta. -
Copia la ruta de la carpeta y ejecuta
font_import(path = "La_ruta_de_la_carpeta")
.
Usando las fuentes personalizadas en R
Después de importar todas las fuentes, tendrás que registrarlas con la función loadfonts
. Tendrás que ejecutar el siguiente código una vez por sesión:
# El argumento 'device' también soporta "pdf" y "postscript"
loadfonts(device = "win", quiet = TRUE)
Ahora podrás especificar las fuentes en el argumento correspondiente de la función gráfica que vayas a emplear, utilizando el nombre que aparezca en la lista fonts()
que se corresponda con la fuente que quieras establecer.
# Especifica la familia de fuente con el nombre que se muestre en la lista fonts()
plot(trees$Volume,
main = "Fuentes personalizadas en R",
xlab = "",
ylab = "Volumen",
pch = 21, col = 4, bg = 4,
family = "Algerian") # Estamos estableciendo la fuente "Algerian"
Lo mismo se aplica para gráficos creados con ggplot2
:
# install.packages("ggplot2")
library(ggplot2)
ggplot(trees, aes(1:length(Volume), Volume)) +
ggtitle("Fuentes personalizadas en ggplot2") +
geom_point(col = 4) +
xlab("") +
theme(text = element_text(family = "Algerian")) # Fuente personalizada
Sin embargo, en algunas funciones, como boxplot
o hist
, no puedes especificar el argumento family
. En este caso existen dos opciones:
Por una parte, puedes crear el gráfico sin textos y añadirlos después con la función title
de la siguiente manera:
hist(trees$Height,
main = "", xlab = "", ylab = "", # Textos vacíos
col = 4)
# Agrega el título y la etiqueta del eje Y
title("Altura", family = "Algerian", cex.main = 2)
title(ylab = "Frecuencia", family = "Algerian", cex.lab = 1)
Por otra parte, puedes modificar los parámetros gráficos estableciendo el argumento family
de la función par
. Ten en cuenta que con este método se modificarán las fuentes de todos los textos, incluidos los números.
# Guarda los parámetros gráficos actuales
op <- par(no.readonly = TRUE)
# Establece la fuente globalmente
par(family = "Algerian") # Especifica el nombre de la fuente
# Crea el histograma
hist(trees$Height,
main = "Todas las fuentes",
ylab = "Frequencia",
xlab = "",
col = 4)
# Reestablece los parámetros gráficos
on.exit(par(op))
# dev.off()
Carga la librería extrafont
y ejecuta la función loadfonts
en tu sesión de R antes de cargar cualquier otro paquete para evitar errores.
El paquete showtext
La librería showtext
se creó como una solución más sencilla (evitando el uso de software externo) mediante una forma más fácil de agregar fuentes personalizadas en gráficos de R. Este paquete funciona con diferentes tipos de fuentes como TrueType (.ttf
), OpenType (.otf
), Type 1, web fonts entre otras, mientras que el anterior solo funciona para fuentes .ttf
.
Agregando una fuente de Google
Se pueden agregar Google Fonts con la función font_add_google
del paquete. Como ejemplo, si quieres añadir la fuente Pacifico puedes escribir:
# install.packages("showtext")
library(showtext)
# Necesitarás conexión a internet
# Si reinicias R, tendrás que ejecutar este código de nuevo para usar la fuente
font_add_google(name = "Pacifico", # Nombre de la fuente en el sitio Google Fonts
family = "pacifico") # Nombre con el que quieres llamar a la fuente
En el argumento name
tendrás que especificar el nombre de la fuente que se muestra en el sitio Google Fonts. La cadena de caracteres especificada en el argumento family
será el que tengas que establecer cuando especifiques la fuente.
Puedes llamar a la función font_add_google
tantas veces como fuentes quieras cargar. Lo mismo se aplica a la función font_add
, que revisaremos en la siguiente sección.
Cargando una fuente personalizada en R
Si quieres agregar fuentes personalizadas en R que hayas descargado desde cualquier recurso tendrás que usar la función font_add
. Para cargar una fuente personalizada por primera vez tendrás que seguir los siguientes pasos:
- Descarga la fuente que quieras.
-
Ve al archivo (
.otf
,.ttf
, …) e instala la fuente en tu ordenador (click derecho – Instalar para todos los usuarios). -
Ejecuta
font_paths()
y ve al directorio que muestre la salida (en Windows debería serC:\\Windows\\Fonts
). - Busca la fuente que has instalado. Haz click derecho – Propiedades y copia el texto que aparece en la parte superior de la pestaña ‘General’.
-
Elige un nombre para especificar en el argumento
family
y pega el texto que copiaste en el punto anterior en el argumentoregular
(más la extensión del archivo) de la funciónfont_add
.
Las próximas veces tan solo tendrás que usar la función font_add
(Paso 5).
A modo ilustrativo vamos a instalar la fuente Demo Muthiara. Descárgala, sigue los pasos anteriores y añádela.
# install.packages("showtext")
library(showtext)
# Comprueba la ruta de las fuentes de tu sistema
font_paths() # "C:\Windows\Fonts"
# Agrega una fuente personalizada. Tendrás que ejecutar esto cada vez que reinices R
font_add(family = "muthiara", # Nombre que quieras usar
regular = "Muthiara-demo-version.otf") # Texto de la pestaña 'General' más la extensión
La función font_add
también tiene los argumentos bold
, italic
, bolditalic
y symbol
en caso de que quieras agregar diferentes estilos en las fuentes que estás cargando (en caso de que estén disponibles para la fuente).
Usando las fuentes en R
Una vez hayas cargado todas las fuente que quieras existen tres formas distintas de usarlas en R con el paquete showtext
:
Primero, si quieres que la fuente se establezca en todos los dispositivos gráficos tan solo tienes que ejecutar la función showtext_auto
y especificar la fuente en el argumento correspondiente de la función que estés utilizando. Como ejemplo, tras cargar las fuentes deseadas puedes especificar la familia de la fuente que cargaste desde Google Fonts de la siguiente manera:
# Recuerda cargar la fuente Pacifico tal y como se mostró en la sección anterior
#-------------------------------------------------------------------------------
# Carga las fuentes para todos los dispositivos gráficos
showtext_auto()
plot(trees$Volume,
family = "pacifico", # Fuente. Recuerda que la llamamos "pacifico"
main = "Volumen árboles",
ylab = "Volumen", xlab = "",
pch = 21, col = 4, bg = 4)
Sin embargo, otras funciones (como boxplot
o hist
) necesitarán que establezcas los textos individualmente como sigue:
# Recuerda cargar la fuente Pacifico tal y como se mostró en la sección anterior
#-------------------------------------------------------------------------------
# Carga las fuentes para todos los dispositivos gráficos
showtext_auto()
boxplot(trees$Volume,
main = "", xlab = "", ylab = "", # Textos vacíos
ylim = c(10, 90),
col = 4)
# Añade el título, la etiqueta del eje Y y el texto con la fuente personalizada
title("Volumen árboles", family = "pacifico", cex.main = 2)
title(ylab = "Volumen", family = "pacifico", cex.lab = 1)
text(x = 0.8, y = 78, "Atípico", family = "pacifico", cex = 1.2)
Una alternativa a estas funciones es establecer la familia de fuente con la función par
, pero tendrás que registrar las fuentes con las funciones windowsFonts
y windowsFont
, donde tendrás que indicar la correspondiente cadena de caracteres de la salida de la función fonts
del paquete extrafonts
. Ve a la sección anterior si la fuente que quieres añadir no aparece en la salida de esa función.
Esto modificará la fuente de todos los textos a la vez. No obstante, este procedimiento solo funcionará con fuentes de Windows, por lo que usaremos la fuente Muthiara en este ejemplo, aunque también puedes descargar una Google Font e instalarla en tu equipo.
# Guardamos los parámetros gráficos actuales
op <- par(no.readonly = TRUE)
# Registramos la fuente. Tendrás que especificar el elemento correspondiente de extrafont::fonts()
# En nuestro caso: extrafont::fonts()[245] devolverá "Muthiara -Demo Version-"
windowsFonts(muthiara = windowsFont("Muthiara -Demo Version-"))
# Establece la fuente globalmente
par(family = "muthiara") # Especifica el nombre de la variable que estableciste en la función windowsFonts
# Crea el gráfico
boxplot(trees$Volume,
main = "FUENTES",
ylab = "Volumen",
ylim = c(10, 90),
col = 4)
text(x = 0.8, y = 78, "Atípico", cex = 1.2)
# Reestablece los parámetros gráficos
on.exit(par(op))
# dev.off()
De manera similar, puedes hacer lo mismo para un gráfico ggplot2
:
# Recuerda cargar la fuente Pacifico tal y como se mostró en la sección anterior
#-------------------------------------------------------------------------------
# install.packages("ggplot2")
library(ggplot2)
# Carga las fuentes para todos los dispositivos gráficos
showtext_auto()
# Boxplot
ggplot(data = trees, aes(x = "", y = Volume)) +
stat_boxplot(geom = "errorbar",
width = 0.2) +
geom_boxplot(fill = 4,
outlier.colour = 1) +
ggtitle("Volumen árboles") +
annotate("text", x= 0.8, y = 78, label = "Atípico",
family = "pacifico") + # Fuente para la anotación
ylab("Volumen") +
xlab("") +
theme(text = element_text(family = "pacifico")) # Fuente para el resto de textos
Segundo, si quieres usar fuentes personalizadas en ciertas ventanas gráficas que abras en tu sesión tendrás que poner tus códigos dentro de las funciones showtext_auto()
y showtext_auto(FALSE)
, que usarán showtext
de forma automática para futuras ventanas gráficas y lo desactivarán, respectivamente. Este es el proceso recomendado para utilizar el paquete. En el siguiente bloque de código puedes ver un ejemplo utilizando el paquete calendR.
# Recuerda cargar la fuente Muthiara tal y como se mostró en la sección anterior
#-------------------------------------------------------------------------------
showtext_auto()
# -------- Gráficos --------------
# install.packages(calendR)
library(calendR)
calendR(year = 2022, mbg.col = 4,
start = "M",
weeknames = c("L", "M", "X", "J", "V", "S", "D"),
months.col = "white",
special.days = "weekend",
special.col = "lightblue",
lty = 0,
title.size = 60,
orientation = "p",
font.family = "muthiara") # Especifica la fuente que cargamos antes
# -------- Fin de los gráficos ----------
showtext_auto(FALSE)
La última opción es usar showtext
en una parte específica del código. Para ese propósito puedes usar las funciones showtext_begin
y showtext_end
.
# Recuerda cargar la fuente Pacifico tal y como se mostró en la sección anterior
#-------------------------------------------------------------------------------
boxplot(trees$Volume,
main = "",
xlab = "",
ylab = "Volumen",
ylim = c(10, 90),
col = 4)
# No podrás usar la fuente "pacifico" fuera de estas funciones:
showtext_begin()
title("Volumen árboles", family = "pacifico", cex.main = 2)
showtext_end()
# Lo siguiente imprimirá una advertencia y usará la fuente por defecto:
text(x = 0.8, y = 78, "Atípico", family = "pacifico", cex = 1.2)
La compatibilidad con RStudio del paquete empieza en la versión 0.9. Si ejecutas showtext_auto
todo debería funcionar según lo esperado.