Oggi affronteremo un concetto molto importante legato alle geometrie (geom_) di GGPLOT2: l’input stat =
di geom_ e la funzione stat_
.
Ma a cosa ci riferiamo con stat? Stat sta per statistics, e riguarda le trasformazioni statistiche che ci sono dietro ogni comando geom_. Infatti, ad ogni comando geom_ è associata una statistica di base che associa ad ogni valore x un valore y.
geom_bar(aes(x = class))
nel dataset mpg.
Quello che la funzione ha prodotto è un barplot delle frequenze delle varie classi, con l’asse delle y rappresentante le count (numero di occorrenze) di ogni classe.
Andiamo ora ad analizzare le caratteristiche di stat.
Statistiche di default
Per prima cosa analizziamo l’input stat =
della funzione geom_.
Come detto in precedenza, ad ogni geom_ è associata una statistica. Noi non andremo ad analizzarle tutte, l’elenco completo lo potete trovare nella tabella statistiche di default in fondo alla pagina.
Partiamo dall’esempio 1, la statistica associata a geom_bar è stat_count, ovvero sull’asse y sono plottate le occorrenze di ogni x nel dataset.
Si può vedere in tabella come molte geom_ siano associate a stat_identity, cosa significa? Sigifica che in quesi casi bisogna fornire sia la x che la y come aes() e che la funzione associerà ad ogni x il proprio valore di y.
Usare una statistica diversa da quella di default
Ovviamente, le statistiche di default possono essere sostituite all’occorrenza con una a piacimento (compatibile con la geometria).La funzione diventerebbe
geom_bar(aes(x, y), stat = "identity")
. Il risultato sarebbe:
Se si dovesse omettere stat = "identity"
, si otterrebbe un errore.
NB: la funzione geom_col
fa benissimo lo stesso lavoro senza aver bisogno della specifica della stat, in quanto la sua di default è identity.
Un altro modo per modificare i valori sull’asse y (dico sempre asse y per convenzione, ma si potrebbe benissimo mappare su y e far fare la statistica su x) è porre y = after_stat()
e all’interno fargli fare qualunque operazione, senza necessità di aggiungere stat =
dopo.
geom_bar(aes(x = class, y = after_stat(100*count / sum(count))))
:
Funzione stat_
Stat però è anche una funzione di ggplot2, dalla struttura <stat_function>
, che può o sostituire geom_ o aggiungersi al grafico.
Infatti, come si può vedere nella tabella complementari, molte geom_ possono essere sosituite direttamente da una corrispondente funzione stat_
.
Per esempio, il grafico in figura 1 può essere ottenuto anche usando il comando ggplot(mpg) + stat_count(aes(x=class))
. C’è da dire però che per convenzione, si usa sempre geom_ quando possibile e si usa la funzione stat_
solo quando non ci sono geom_ possibili.
Nella tabella geometrie di default c’è l’elenco delle possibili funzioni stat_
, con la geometria di default associata.
Vediamone subito un esempio di applicazione.
stat_summary
. In questo caso plottiamo i punti corrispondenti ai valori minimi e massimi di cavalli (hp) per i tre sottogruppi di macchine (dataset mtcars), creati in basi al numero di cilindri (cyl).
ggplot(mtcars) +
stat_summary(aes(x = factor(cyl), y = mpg), fun = min, color = "blue") +
stat_summary(aes(x = factor(cyl), y = mpg), fun = max, color = "red")
Ci sono innumerevoli utilizzi per le varie funzioni stat, per questo rimando alla documentazione corrispondente. Questo post serviva principalmente per illustrare, con qualche esempio, come sfruttare la componente stat di ggplot2.
Tabelle
Statistiche di default
Geom | Statistica default |
---|---|
geom_abline() | stat_identity() |
geom_area() | stat_identity() |
geom_bar() | stat_count() |
geom_bin2d() | stat_bin_2d() |
geom_blank() | None |
geom_boxplot() | stat_boxplot() |
geom_col() | stat_identity() |
geom_count() | stat_sum() |
geom_countour_filled() | stat_countour_filled() |
geom_countour() | stat_countour() |
geom_crossbar() | stat_identity() |
geom_curve() | stat_identity() |
geom_density_2d_filled() | stat_density_2d_filled() |
geom_density_2d() | stat_density_2d() |
geom_density() | stat_density() |
geom_dotplot() | stat_bindot() |
geom_errorbar() | stat_identity() |
geom_errorbarh() | stat_identity() |
geom_freqpoly() | stat_bin() |
geom_function() | stat_function() |
geom_hex() | stat_bin_hex() |
geom_histogram() | stat_bin() |
geom_hline() | stat_identity() |
geom_jitter() | stat_identity() |
geom_label() | stat_identity() |
geom_line() | stat_identity() |
geom_linerange() | stat_identity() |
geom_map() | stat_identity() |
geom_path() | stat_identity() |
geom_point() | stat_identity() |
geom_pointrange() | stat_identity() |
geom_polygon() | stat_identity() |
geom_qq_line() | stat_qq_line() |
geom_qq() | stat_qq() |
geom_quantile() | stat_quantile() |
geom_raster() | stat_identity() |
geom_rect() | stat_identity() |
geom_ribbon() | stat_identity() |
geom_rug() | stat_identity() |
geom_segment() | stat_identity() |
geom_sf_label() | stat_sf_coordinates() |
geom_sf_text() | stat_sf_coordinates() |
geom_sf() | stat_sf() |
geom_smooth() | stat_smooth() |
geom_spoke() | stat_identity() |
geom_step() | stat_identity() |
geom_text() | stat_identity() |
geom_tile() | stat_identity() |
geom_violin() | stat_ydensity() |
geom_vline() | stat_identity() |