Ответ 1
Я думаю о размере устройства в виде листа бумаги, шрифт 12 pt имеет тот же размер на любом листе бумаги. Однако в pdf_document изображение масштабируется, чтобы соответствовать области фигуры и, соответственно, уменьшать или растягивать размер шрифта в графике.
Я бы порекомендовал попробовать tikz-графику. Rmarkdown позволяет вам включать команды и параметры LaTeX в .Rmd и корректно отображать их в pdf_document. Использование графики tikz позволяет вам указать определенные функции разметки для каждого label
в графике.
Во-первых, вам нужно будет включить правильную информацию заголовка
---
title: SO Example
output: pdf_document
header-includes:
- \usepackage{lipsum}
- \usepackage{tikz}
---
Файл .Rmd
продолжается
```{r}
# Chunk 1: package load and data set up.
# Note: The `word` column contains labels with LaTeX markups
library(ggplot2)
df <- data.frame(x = rep(1:5,5),
y = rep(1:5, each=5),
word = c(rep("Test",5),
c("$\\alpha$", "{\\bf bold}", "{\\it italic}",
"{\\footnotesize footnotesize}", "$\\beta$"),
rep("test", 15)))
```
```{r, dev = "tikz", fig.width = 6, fig.height = 6}
# A 6 inch by 6 inch figure
ggplot(data = df, mapping = aes(x = x, y = y, label = word)) + geom_text()
```
и выводит результат:
Меньшая графика, где размер шрифта ярлыков должен быть отредактирован:
```{r, dev = "tikz", fig.width = 3, fig.height = 3}
# A 3 inch by 3 inch figure
ggplot(data = df, mapping = aes(x = x, y = y, label = word)) + geom_text()
```
Пример построения динамических размеров шрифтов выполняется следующим образом:
# Example of dynamically setting label markups
Some blank text, followed by some lipsum form \LaTeX:
\lipsum[1]
```{r, dev = "tikz"}
library(stringr)
State_Names <-
data.frame(x = 1:5, y = rep(10:1, each = 5), state = state.name)
# Set size by lenght of state name
# Less than 8 chars: normalsize
# 8 or more chars: tiny
nchars <- sapply(State_Names$state, nchar)
State_Names$state[nchars >= 8] <-
paste0("{\\tiny ", State_Names$state[nchars >= 8], "}")
ggplot(State_Names, aes(x = x, y = y, label = state)) + geom_text() + xlim(0, 6)
```
С выходом: