Cambiar fuentes en ggplot2

Resuelto EngBIRD asked hace 54 años • 7 respuestas

Érase una vez, cambié mi ggplot2fuente 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()))
EngBIRD avatar Jan 01 '70 08:01 EngBIRD
Aceptado

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_importasí (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:

ingrese la descripción de la imagen aquí

Actualizar:

Puede encontrar el nombre de una fuente que necesita para el familyparámetro element_textcon 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: ingrese la descripción de la imagen aquí

Mike Wise avatar Dec 30 '2015 11:12 Mike Wise

Otra opción es utilizar showtextun 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 showtextno 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 showtexten 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.

Tung avatar Aug 18 '2018 06:08 Tung

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 monoestá 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.

D A Wells avatar May 13 '2020 13:05 D A Wells

Esto podría ser de interés para las personas que buscan agregar fuentes personalizadas dentro de ggplotsuna shinyaplicación en shinyapps.io.

Puede:

  1. Coloque una fuente personalizada en wwwel directorio: por ejemplo, IndieFlower.ttfdesde aquí
  2. Sigue los pasos desde aquí.

Esto lleva a la siguiente sección superior dentro del app.Rarchivo:

dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')

Puede encontrar una aplicación de ejemplo completa aquí .

symbolrush avatar Mar 14 '2019 09:03 symbolrush

Para cambiar la fuente globalmente para los gráficos de ggplot2.

theme_set(theme_gray(base_size = 20, base_family = 'Font Name' ))
Antex avatar Jul 19 '2020 17:07 Antex