Cambiar fuentes en ggplot2
Érase una vez, cambié mi ggplot2
fuente usando windowsFonts(Times=windowsFont("TT Times New Roman"))
. Ahora, no puedo sacarlo de esto.
Al intentar configurar family=""
, ggplot2
theme()
parece que no puedo generar un cambio en las fuentes mientras compilo el MWE a continuación con diferentes familias de fuentes.
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16,
# family="Comic Sans MS"))
# family="CM Roman"))
# family="TT Times New Roman"))
# family="Sans"))
family="Serif"))
print(a)
print("Graph should have refreshed")
R devuelve una advertencia font family not found in Windows font database
, pero estaba siguiendo un tutorial (si puedo encontrarlo nuevamente, actualizaré el enlace aquí) que decía que esto era normal y no un problema. Además, de alguna manera esto funcionó en un momento porque mi gráfico alguna vez usó alguna fuente de tipo arial o helvitica. Creo que esta siempre ha sido una advertencia presente incluso durante los tiempos iniciales de migración.
ACTUALIZAR
cuando ejecuto windowsFonts()
mi salida es
$serif [1] "TT Times New Roman"
$sans [1] "TT Arial"
$mono [1] "TT Courier nuevo"
Pero esto fue después de ejecutar, font_import()
por lo que solo puedo concluir que mis fuentes no se guardan en el lugar correcto. El código que ejecutó la font_import()
solicitud en realidad carga las bibliotecas con:
LocalLibraryLocation <- paste0("C:\\Users\\",Sys.getenv("USERNAME"),"\\Documents","\\R\\win-library\\3.2");
.libPaths(c(LocalLibraryLocation, .libPaths()))
Creo que te perdiste un paso de inicialización.
Puedes ver qué fuentes tienes disponibles con el comando windowsFonts()
. Por ejemplo, el mío se ve así cuando comencé a mirar esto:
> windowsFonts()
$serif
[1] "TT Times New Roman"
$sans
[1] "TT Arial"
$mono
[1] "TT Courier New"
Después de instalar el paquete extraFont y ejecutarlo font_import
así (tardó como 5 minutos):
library(extrafont)
font_import()
loadfonts(device = "win")
Tenía muchos más disponibles; posiblemente demasiados, ciertamente demasiados para enumerarlos aquí.
Luego probé tu código:
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16, family="Comic Sans MS"))
print(a)
dando esto:
Actualizar:
Puede encontrar el nombre de una fuente que necesita para el family
parámetro element_text
con el siguiente fragmento de código:
> names(wf[wf=="TT Times New Roman"])
[1] "serif"
Y luego:
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16, family="serif"))
print(a)
rendimientos:
Otra opción es utilizar showtext
un paquete que admita más tipos de fuentes (TrueType, OpenType, Type 1, fuentes web, etc.) y más dispositivos gráficos, y evite el uso de software externo como Ghostscript.
# install.packages('showtext', dependencies = TRUE)
library(showtext)
Importar algunas fuentes de Google
# https://fonts.google.com/featured/Superfamilies
font_add_google("Montserrat", "Montserrat")
font_add_google("Roboto", "Roboto")
Cargue la fuente desde la ruta de búsqueda actual enshowtext
# Check the current search path for fonts
font_paths()
#> [1] "C:\\Windows\\Fonts"
# List available font files in the search path
font_files()
#> [1] "AcadEref.ttf"
#> [2] "AGENCYB.TTF"
#> [428] "pala.ttf"
#> [429] "palab.ttf"
#> [430] "palabi.ttf"
#> [431] "palai.ttf"
# syntax: font_add(family = "<family_name>", regular = "/path/to/font/file")
font_add("Palatino", "pala.ttf")
font_families()
#> [1] "sans" "serif" "mono" "wqy-microhei"
#> [5] "Montserrat" "Roboto" "Palatino"
## automatically use showtext for new devices
showtext_auto()
Trama: es necesario abrir el dispositivo de gráficos de Windows ya que showtext
no funciona bien con el dispositivo de gráficos integrado RStudio
# https://github.com/yixuan/showtext/issues/7
# https://journal.r-project.org/archive/2015-1/qiu.pdf
# `x11()` on Linux, or `quartz()` on Mac OS
windows()
myFont1 <- "Montserrat"
myFont2 <- "Roboto"
myFont3 <- "Palatino"
library(ggplot2)
a <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text = element_text(size = 16, family = myFont1)) +
annotate("text", 4, 30, label = 'Palatino Linotype',
family = myFont3, size = 10) +
annotate("text", 1, 11, label = 'Roboto', hjust = 0,
family = myFont2, size = 10)
## On-screen device
print(a)
## Save to PNG
ggsave("plot_showtext.png", plot = a,
type = 'cairo',
width = 6, height = 6, dpi = 150)
## Save to PDF
ggsave("plot_showtext.pdf", plot = a,
device = cairo_pdf,
width = 6, height = 6, dpi = 150)
## turn showtext off if no longer needed
showtext_auto(FALSE)
Editar : otra solución alternativa para usar showtext
en RStudio. Ejecute el siguiente código al comienzo de la sesión de R ( fuente )
trace(grDevices::png, exit = quote({
showtext::showtext_begin()
}), print = FALSE)
Edición 2 : a partir de la versión 0.9, showtext puede funcionar bien con el dispositivo gráfico RStudio (RStudioGD). Simplemente llame showtext_auto()
a la sesión de RStudio y luego los gráficos se mostrarán correctamente.
Una respuesta sencilla si no quieres instalar nada nuevo.
Para cambiar todas las fuentes en su trama ¿ plot + theme(text=element_text(family="mono"))
Dónde mono
está la fuente elegida?
Lista de opciones de fuente predeterminadas:
- mononucleosis infecciosa
- sin
- serifa
- mensajero
- helvética
- Veces
- Vanguardia
- hombre de libros
- Helvética-estrecha
- Libro De Escuela Del Nuevo Siglo
- Palatino
- URWGótico
- URWBookman
- NimbusMon
- URWHelvetica
- NimbusSan
- NimbusSanCond
- siglosch
- URWPalladio
- URWTimes
- NimbusRom
R no tiene una gran cobertura de fuentes y, como señala Mike Wise , R usa nombres diferentes para fuentes comunes.
Esta página analiza en detalle las fuentes predeterminadas.
Esto podría ser de interés para las personas que buscan agregar fuentes personalizadas dentro de ggplots
una shiny
aplicación en shinyapps.io.
Puede:
- Coloque una fuente personalizada en
www
el directorio: por ejemplo,IndieFlower.ttf
desde aquí - Sigue los pasos desde aquí.
Esto lleva a la siguiente sección superior dentro del app.R
archivo:
dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')
Puede encontrar una aplicación de ejemplo completa aquí .
Para cambiar la fuente globalmente para los gráficos de ggplot2.
theme_set(theme_gray(base_size = 20, base_family = 'Font Name' ))