ggplot2 – L’unità di misura

Una domanda veloce che non riesco a trovare una risposta sul web (o sul libro di Wickham):

Qual è l’unità dell’argomento dimensione in ggplot2? Ad esempio, geom_text (size = 10) – 10 in quali unità?

EDIT: la stessa domanda si applica all’unità di default in ggsave (height = 10, width = 10)

La risposta è: l’unità è i punti. È l’unità di fontsize nel pacchetto della grid . In ?unit , troviamo la seguente definizione

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

(ma prendi nota dei Big Points. 72 bp = 1 in. “bigpts” strettamente correlati Big Points. 72 bp = 1 in. )

Internamente ggplot2 moltiplicherà la dimensione del carattere di un numero magico ggplot2:::.pt , definito come 1 / 0,352777778 .

Ecco una dimostrazione, creo una lettera usando la griglia e ggplot2 con le stesse dimensioni:

 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')) 

inserisci la descrizione dell'immagine qui

Addendum Grazie a @baptiste

Il “numero magico” ( definito in aaa-constants.r come .pt <- 1 / 0,352777778 ) è in realtà solo il fattore di conversione tra “punti” e “mm”, ovvero 1/72 * 25.4 = 0.352777778 . Sfortunatamente, la grid fa la sottile distinzione tra “pts” e “bigpts”, il che spiega perché convertUnit(unit(1, "pt"), "mm", valueOnly=TRUE) fornisce il valore leggermente diverso di 0.3514598 .

Il pacchetto ‘ggplot2’, come ‘latex’ prima di esso, è costruito sul pacchetto della grid . Puoi ottenere le unità disponibili a:

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

(Io uso il formalismo pkg::func perché nella maggior parte dei casi la grid è caricata aa NAMESPACE ma non è collegata quando vengono caricati latex o `ggplot2.)

In precedenza ho pubblicato un commento che in seguito ho cancellato dicendo che la size era in punti. L’ho fatto dopo aver visto che la dimensione del testo con size=10 era di circa 10 mm. Il numero “magico” menzionato da Agstudy è infatti compreso nell’1% di:

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

Da ?aes_linetype_size_shape

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

height e width in ggsave si riferiscono al par("din") da ?par

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

Quindi immagino che la size in aes sia in millimetri e che ggsave height e la width siano in pollici.