Ошибка при использовании Arial на рисунке.eps с пакетом extrafont

Я использую ggplot2 в R для создания рисунков для публикации, в которой все рисунки должны быть в формате.eps, а все шрифты должны быть в формате Arial. Я следовал этому руководству, чтобы сделать это с помощью пакета extrafont. Насколько я понимаю, линия loadfonts(device = "postscript") следует зарегистрировать все шрифты, которые я импортировал (включая Arial), на устройстве postscript. Но когда я запускаю свой код и пытаюсь сохранить свою фигуру, используя этот код:

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

Я все еще получаю эту ошибку:

Ошибка в grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y: семейство 'Arial' не включено в устройство postscript()

Что мне не хватает?

4 ответа

Решение

Предполагая, что вы работаете в операционной системе Windows, вы можете создать график, используя пакет showtext.

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

Недостатком является то, что вы не можете использовать ggsave() функцию, но вместо этого вызовите функцию устройства самостоятельно.

Для использования showtext Пакет README предоставляется по адресу https://github.com/yixuan/showtext.

Я тоже столкнулся с этой проблемой при использовании extrafontsпакет с ggsave()за eps-файлы. Я знаю, что эта ветка устарела, но, возможно, мой обходной путь может помочь другим в будущем. :)

R не умеет встраивать шрифты. Однако в прошлом в R была включена графическая библиотека Cairo (поэтому вам больше не нужно устанавливать пакет Cairo!), которая способна обрабатывать встраивание. Чтобы сохранить .epsиспользуя графическую библиотеку Cairo, просто используйте cairo_psв качестве device:

      ggsave(filename="Fig1.eps", plot = last_plot(), device = cairo_ps)

Для дальнейшего использования у меня также были проблемы с использованием extrafont с Arial (но в Windows), и оказалось, что было несколько причин.

Я получил следующие ошибки: Error in title(...) : metric information not available for this device, In title(...) : font metrics unknown for character 0x4d а также font width unknown,

Оказывается, что для extrafont требуется ghostscript, что совсем не ясно из этих сообщений об ошибках. На самом деле у меня был установлен ghostscript, но (по крайней мере, в моем случае) он также должен был быть зарегистрирован в переменной среды Path, как описано здесь (замените номер вашей версии).

Даже с этим, кажется, что это не имена шрифтов, перечисленные в names(postscriptFonts()) а также fonttable() это можно использовать. Arial а также Times New Roman (или же TimesNewRoman или же TimesNewRomanPSMT) вместо этого не работай на меня ArialMT а также Times делать. Я не знаю, почему это так и как можно найти список имен, которые работают.

Вместо extrafont пакет

library(ggplot2)
plot <- ggplot(mtcars, aes(wt, qsec)) + 
  geom_point() + 
  theme(text = element_text(family = "Arial"),
        axis.title = element_text(size = 22))

ggsave(filename = "myfile.eps",plot)
Другие вопросы по тегам