一个我在网上(或 Wickham 的书)上找不到答案的快速问题:
size 参数的单位是什么ggplot2
?例如,geom_text(size = 10)
——10
以什么单位?
同样的问题适用于ggsave(height = 10, width = 10)
.
答案是:单位是积分。它是grid
包中字体大小的单位。在?unit
中,我们找到以下定义
"points" Points. There are 72.27 points per inch.
(但请注意密切相关的“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'))
附录感谢@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
。
'ggplot2' 包,就像它之前的 'lattice' 一样,是建立在grid
包之上的。您可以在以下位置获得可用单位:
?grid::unit
?grid::convertX
?grid::convertY
grid::convertX(grid::unit(72.27, "points"), "inches")
(我使用形式主义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
从?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")
from相关?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
inaes
以毫米为单位,ggsave
height
并且width
以英寸为单位。