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

Ggplot2 - Единица измерения размера

Быстрый вопрос, который я не могу найти в Интернете (или в книге Уикхема):

Что такое единица аргумента размера в ggplot2? Например, geom_text (size = 10) - 10 в каких единицах?

EDIT: тот же вопрос относится к блоку по умолчанию в ggsave (height = 10, width = 10)

4b9b3361

Ответ 1

Ответ: единица - это точки. Это единица шрифта в пакете grid. В ?unit находим следующее определение

"points" Points. There are 72.27 points per inch.

(но обратите внимание на тесно связанные "bigpts" Big Points. 72 bp = 1 in.)

Внутренне ggplot2 умножит размер шрифта на магическое число ggplot2:::.pt, определенное как 1/0.352777778.

Здесь демонстрация, я создаю письмо, используя сетку и ggplot2 с одинаковым размером:

library(grid)
library(ggplot2)
ggplot(data=data.frame(x=1,y=1,label=c('A'))) +
  geom_text(aes(x,y,label=label),size=100)
## I divide by the magic number to get the same size.
grid.text('A',gp=gpar(fontsize=100/0.352777778,col='red'))

enter image description here

Добавление Благодаря @baptiste

"Магическое число" (определенное в aaa-constants.r как .pt < - 1/0.352777778) на самом деле является просто коэффициентом пересчета между "точками" и "мм", то есть 1/72 * 25.4 = 0.352777778. К сожалению, grid делает тонкое различие между "pts" и "bigpts", что объясняет, почему convertUnit(unit(1, "pt"), "mm", valueOnly=TRUE) дает немного другое значение 0.3514598.

Ответ 2

Пакет "ggplot2", как и "решетка" перед ним, построен на пакете grid. Вы можете получить доступные единицы по адресу:

?grid::unit
?grid::convertX
?grid::convertY

grid::convertX(grid::unit(72.27, "points"), "inches")

(Я использую формализм pkg::func, потому что в большинстве случаев grid загружается a NAMESPACE, но не привязывается при загрузке lattice или `ggplot2.)

Ранее я опубликовал комментарий, который позже я удалил, сказав, что size был в точках. Я сделал это, увидев, что размер текста с size=10 составляет примерно 10 мм. "Магическое" число, упомянутое агстудией, фактически находится в пределах 1% от:

as.numeric(grid::convertX(grid::unit(1, "points"), "mm"))
#[1] 0.3514598
0.352777778/.Last.value
#[1] 1.00375

Ответ 3

От ?aes_linetype_size_shape

# Size examples
# Should be specified with a numerical value (in millimetres),
# or from a variable source

height и width в ggsave относятся к par("din") из ?par

din

  R.O.; the device dimensions, (width, height), in inches. See also dev.size,
  which is updated immediately when an on-screen device windows is re-sized.

Итак, я думаю, size в aes находится в миллиметрах, а ggsave height и width находятся в дюймах.