Подтвердить что ты не робот

Невозможно изменить шрифты в ggplot/geom_text

Я не могу установить шрифты в geom_text. Вот что я пробовал:

    labels_test<-data.frame(a=c("a","b","c"),b=c(1:3),c=c(3:1))
    # works
    ggplot () + geom_text(data=labels_test,aes(b,c,label=a),color="blue")
    # does not work: 
    ggplot () + geom_text(data=labels_test,aes(b,c,label=a),color="blue",family="Times")
    # error message:  In grid.Call.graphics(L_text, as.graphicsAnnot(x$label), x$x, x$y,:
    # Font family not found in Windows font database

Я уже импортировал все шрифты, как указано здесь. Любые идеи, что по-прежнему происходит не так?

4b9b3361

Ответ 1

Я бы попробовал

windowsFonts(Times=windowsFont("TT Times New Roman"))

При этом явно указывается отображение шрифтов Windows.

Ответ 2

Другие ответы не помогли решить мою проблему (Windows 10).

Ключ моей системы состоял в вызове extrafont::loadfonts(device="win") до library(ggplot2).

extrafont::loadfonts(device="win")
#extrafont::fonttable()
#extrafont::font_import("C:/Windows/Fonts/", pattern = "RobotoCondensed")
library(ggplot2)

Общая проблема с расположением шрифтов:

Я ранее установил шрифты из случайной папки с extrafont::font_import(). Как таковой extrafont::fonttable() ссылаются на файлы в моей папке C:\Windows\Fonts\. Чтобы исправить это я reset my extrafonts::fonttable() с помощью install.packages("extrafontdb"), чтобы очистить ссылку на шрифты в другом месте.

Изменить сохранение:

Более глубокое отверстие кролика. Сохранение было дополнительной проблемой. Чтобы extrafont::loadfonts(device="pdf"), я должен был убедиться, что в моих extrafont::fonttable() шрифтах не было одинаковых семейных имен и жирного/курсивного статуса. Я отредактировал extrafont:::fonttable_file(), чтобы разрешить любые дублированные жирные/курсивные шрифты в моей семье. Используя Roboto Condensed, я переименовал семейство шрифтов светлых шрифтов в "Roboto Condensed Light".

Сохранение с помощью ggsave(device="pdf") затем сработало. Открыв файлы в acrobat, шрифты отображались неправильно. Я попытался внедрить шрифты с ghostscript, а также использовать устройство cairo_pdf. Самое простое и функциональное решение - открыть файлы .pdf в Illustrator (там хорошо отображаются шрифты) и сразу же повторно сохранить их снова как .pdf.

Изменить 2 относительно сохранения:

Сохранение как .eps было единственным способом сохранить файл как в иллюстраторе, так и в acrobat. Результат - прекрасный. ggsave(g, file="Figure.eps", fonts=c("FONT FAMILIES USED", "Roboto Condensed", "Roboto Condensed Light"))

Конечный код построения:

Вот мой последний набор вызовов, которые я использую перед графикой. Комментарии - это команды настройки, которые нужно запускать только один раз.

# Plotting
extrafont::loadfonts(device="pdf")
extrafont::loadfonts(device="postscript")
# extrafont::font_import("C:/Windows/Fonts/", pattern = "RobotoCondensed", prompt = F)
# extrafont::fonttable()
# C:/Program Files/R/R-3.3.1/library/extrafontdb/fontmap/ - Change lights to "Roboto Condensed Light"
# After ggsave(device="pdf") or ggsave(device="eps") open and resave the file in Illustrator
library(hrbrthemes)
library(ggplot2)

Ответ 3

Вы должны импортировать системные шрифты с помощью команды:

font_import(paths = NULL, recursive = TRUE, prompt = TRUE,pattern = NULL)