rfontsggplot2eps

Error using Arial in .eps figure with extrafont package


I'm using ggplot2 in R to generate figures for a publication in which all figures need to be .eps format and all fonts needs to be Arial. I've been following this guide to doing this using the extrafont package. As I understand it, the line loadfonts(device = "postscript") should register all of the fonts I imported (which includes Arial) with the postscript device. But when I run my code and try to save my figure using this code:

ggplot() + geom_point(aes(x=xvar, y=yvar)) + theme_minimal(base_family = "Arial")
library(extrafont)
font_import()
loadfonts(device = "postscript")
ggsave(filename = "myfile.eps")

I still get this error:

Error in grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : family 'Arial' not included in postscript() device

What am I missing?


Solution

  • Assuming you are on a Windows OS, you can alternatively create the graph using the showtext package.

    library(showtext)
    ## add the Arial font
    font.add("Arial", regular = "arial.ttf",
        bold = "arialbd.ttf", italic = "ariali.ttf", bolditalic = "arialbi.ttf")
    
    setEPS()
    postscript("some_graph.eps")
    showtext.begin() ## call this function after opening a device
    
    ggplot() + geom_point(aes(x=xvar, y=yvar)) +
        theme_minimal(base_family = "Arial")
    
    dev.off()
    

    The drawback is that you cannot use the ggsave() function, but instead call the device function by yourself.

    For the usage of the showtext package, a README is given at https://github.com/yixuan/showtext.