ggplot2 - The unit of size
The 'ggplot2' package, like 'lattice' before it, is built on the grid
package. You can get the available units at:
?grid::unit
?grid::convertX
?grid::convertY
grid::convertX(grid::unit(72.27, "points"), "inches")
(I use the formalism pkg::func
because in most cases grid
is loaded a a NAMESPACE but not attached when either lattice
or `ggplot2 are loaded.)
I earlier posted a comment that I later deleted saying that size
was in points. I did so after seeing that the size of the text with size=10
was roughly 10 mm. The "magic" number mentioned by agstudy is in fact within 1% of:
as.numeric(grid::convertX(grid::unit(1, "points"), "mm"))
#[1] 0.3514598
0.352777778/.Last.value
#[1] 1.00375
The answer is : The unit is the points. It is the unit of fontsize in the grid
package. In ?unit
, we find the following definition
"points" Points. There are 72.27 points per inch.
(but note the closely related "bigpts" Big Points. 72 bp = 1 in.
)
Internally ggplot2
will multiply the font size by a magic number ggplot2:::.pt
, defined as 1/0.352777778.
Here a demonstration, I create a letter using grid and ggplot2 with same size:
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'))
Addendum Thanks to @baptiste
The "magic number"(defined in aaa-constants.r as .pt <- 1 / 0.352777778) is really just the conversion factor between "points" and "mm", that is 1/72 * 25.4 = 0.352777778
. Unfortunately, grid
makes the subtle distinction between "pts" and "bigpts", which explains why convertUnit(unit(1, "pt"), "mm", valueOnly=TRUE)
gives the slightly different value of 0.3514598
.
From ?aes_linetype_size_shape
# Size examples
# Should be specified with a numerical value (in millimetres),
# or from a variable source
height
and width
in ggsave relate to 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.
So I guess size
in aes
is in millimetres and ggsave
height
and width
are in inches.