ggplot2 - 大小的单位

Hei*_*erg 37 r ggplot2

一个我无法在网上找到答案的快速问题(或Wickham的书):

ggplot2中size参数的单位是多少?例如,geom_text(size = 10) - 10个单位是多少?

编辑:同样的问题适用于ggsave中的默认单位(高度= 10,宽度= 10)

ags*_*udy 42

答案是:单位是积分.它是grid包中fontsize的单位.在?unit,我们找到以下定义

"points" Points. There are 72.27 points per inch.
Run Code Online (Sandbox Code Playgroud)

(但请注意密切相关的"bigpts" Big Points. 72 bp = 1 in.)

内部ggplot2将字体大小乘以幻数ggplot2:::.pt,定义为1/0.352777778.

这是一个演示,我使用grid和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'))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

附录感谢@baptiste

"幻数"(在aaa-constants.r中定义为.pt < - 1/0.352777778)实际上只是"点"和"mm"之间的转换因子,即1/72 * 25.4 = 0.352777778.不幸的是,grid在"pts"和"bigpts"之间进行了微妙的区分,这解释了为什么convertUnit(unit(1, "pt"), "mm", valueOnly=TRUE)给出了稍微不同的值0.3514598.

  • 重写这个答案将不胜感激.ggplot2中的单位大小是mm,而不是pt,我刚刚将.pt重新定义为72/25.4,希望在代码中更清晰 (8认同)
  • 我现在已将其更改为72.27/25.4,因为正如评论中指出的那样,网格使用打印机的指针,而不是Adobe /大点. (5认同)
  • 整个ggplot2中使用的魔术数是`fontsize = size * ggplot2 :::。pt`,在aaa-constants.r`中定义为.pt &lt;-1 / 0.352777778` (2认同)
  • 为了清楚起见,可能会注意到“ 1/72 * 25.4 = 0.352777778”,即点-&gt;英寸-&gt;毫米。网格将点转换为mm的方式略有不同,可能是因为有时认为点的定义是特定于设备的。 (2认同)

42-*_*42- 7

'ggplot2'包就像它之前的'lattice'一样,是在grid包上构建的.您可以在以下位置获得可用的单位:

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

grid::convertX(grid::unit(72.27, "points"), "inches")
Run Code Online (Sandbox Code Playgroud)

(我使用形式主义pkg::func是因为在大多数情况下grid加载了一个NAMESPACE但是lattice在加载任何一个或`ggplot2 时都没有附加.)

我之前发表了一条评论,我后来删除了这句评论size.我看到文本大小size=10约为10毫米后就这样做了.agstudy提到的"神奇"数字实际上在1%以内:

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