Предупреждение в grid.Call (C_textBounds, as.graphicsAnnot (x $ label), x $ x, x $ y,: неизвестная ширина шрифта для символа 0x20 - PullRequest
1 голос
/ 28 мая 2020

Я хотел бы использовать бесплатный шрифт Lato в ggplot2 графиках, так как остальная часть моего документа с уценкой R установлена ​​в этом шрифте.

Шрифт установлен в моей системе и доступны в книге шрифтов ( только один раз ).

Все доступные шрифты загружаются с пакетом extrafont и регистрируются в extrafontdb.

Когда я Вяжите мой уценочный документ как PDF, весь текст правильно набран в Lato. Однако метки графиков моих ggPlots не отображаются.

Я также получаю следующее предупреждение:

Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font width unknown for character 0x20

После встраивания шрифтов, содержащихся в документе, с помощью extrafont::embed_fonts метки графика показаны для всех рисунков с использованием шрифта Lato, но

  • метки графика не содержат пробелов между словами,
  • любых ссылок (внутренние ссылки , URL, цитаты) больше не работают.

MWE, включая цифры ggPlot с Lato и без него, поскольку шрифт представлен ниже ( Lato свободно доступен здесь ) Чтобы встроить шрифты потом нужно запустить embed_fonts("TestRmd.pdf", outfile="TestRmd_embedded.pdf")

Любая помощь приветствуется!

MWE:

---
title: "Embedding Fonts in PDF"
output: pdf_document
urlcolor: blue
---

```{r echo=FALSE}
library(ggplot2)
```

### Plot with standard font {#standard}
```{r echo=FALSE, out.width = '30%'}
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +     
  ggtitle("Fuel Efficiency of 32 Cars") +
  xlab("Weight (x1000 lb)") + ylab("Miles per Gallon")
```

### Load fonts and set font for ggplots globally
```{r include=FALSE}
# install.packages("extrafont") # see https://github.com/wch/extrafont/
library(extrafont)
# font_import()   # run once
loadfonts()       # loadfonts

# globally set ggplot2 theme and font ("Lato Light")
theme_set(theme_minimal(base_size=12, base_family="Lato Light"))
```

### Plot with newly set standard font (= Lato) {#lato}
```{r echo=FALSE, out.width = '30%'}
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +     
  ggtitle("Fuel Efficiency of 32 Cars") +
  xlab("Weight (x1000 lb)") + ylab("Miles per Gallon")
```

### Plot with Impact font {#impact}
```{r echo=FALSE, out.width = '30%'}
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="Impact"))
```

### Run to embed fonts
```{r eval=FALSE, include=TRUE}
embed_fonts("TestRmd.pdf", outfile="TestRmd_embedded.pdf")
```

### Links test

Links test 1 (internal reference): [Headline standard](#standard)

Links test 2 (URL): [RStudio has become a Public Benefit Corporation](https://blog.rstudio.com/2020/01/29/rstudio-pbc)

AddOn:

Еще более простая проблема но, вероятно, связано с той же проблемой:

library(extrafont)
extrafont::font_import()
p <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point() + theme_minimal(base_size=10, base_family="Lato Light")
ggsave(p, filename = "iris.pdf")

График в сохраненном PDF-файле не содержит меток. Использование cairo_pdf в соответствии с рекомендациями на нескольких сайтах SO (например, 1 , 2 ) не помогает и приводит к следующей ошибке:

ggsave(p, filename = "iris.pdf", device = cairo_pdf)
# In dev(filename = filename, width = dim[1], height = dim[2], ...) :
#   failed to load cairo DLL

1 Ответ

2 голосов
/ 04 июня 2020

Я пытался заставить его работать, используя extrafont, но безуспешно. Я все еще не совсем уверен, но думаю, что это ошибка. Вот решение с использованием пакета showtext:

---
title: "Embedding Fonts in PDF"
output: pdf_document
urlcolor: blue
---

```{r include=FALSE}
# notice the chunk option 'fig.showtext' that tells R to use the showtext 
# functionalities for each ne graphics device opened
knitr::opts_chunk$set(dev = 'pdf', cache = FALSE, fig.showtext = TRUE)

library(ggplot2)
library(showtext)

font_add(family = "Lato", regular = "/Users/martin/Library/Fonts/Lato-Light.ttf") 
```


### Plot with newly set standard font (= Lato) {#lato}
```{r echo=FALSE, out.width = '100%'}
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(family="Lato"))
```

enter image description here

...