Changing fonts in ggplot2

前端 未结 5 1413
盖世英雄少女心
盖世英雄少女心 2020-11-22 12:59

Once upon a time, I changed my ggplot2 font using using windowsFonts(Times=windowsFont(\"TT Times New Roman\")) to change it. Now I can\'t get it

5条回答
  •  南方客
    南方客 (楼主)
    2020-11-22 13:46

    Another option is to use showtext package which supports more types of fonts (TrueType, OpenType, Type 1, web fonts, etc.) and more graphics devices, and avoids using external software such as Ghostscript.

    # install.packages('showtext', dependencies = TRUE)
    library(showtext)
    

    Import some Google Fonts

    # https://fonts.google.com/featured/Superfamilies
    font_add_google("Montserrat", "Montserrat")
    font_add_google("Roboto", "Roboto")
    

    Load font from the current search path into showtext

    # 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 = "", 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() 
    

    Plot: need to open Windows graphics device as showtext does not work well with RStudio built-in graphics device

    # 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) 
    

    Edit: another workaround to use showtext in RStudio. Run the following code at the beginning of the R session (source)

    trace(grDevices::png, exit = quote({
        showtext::showtext_begin()
    }), print = FALSE)
    

提交回复
热议问题