50

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

size 参数的单位是什么ggplot2?例如,geom_text(size = 10)——10以什么单位?

同样的问题适用于ggsave(height = 10, width = 10).

4

3 回答 3

53

答案是:单位是积分。它是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

于 2013-06-26T05:50:51.753 回答
8

'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
于 2013-06-26T07:02:44.307 回答
4

?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.

所以我猜sizeinaes以毫米为单位,ggsave height并且width以英寸为单位。

于 2013-06-26T05:26:45.247 回答