ggplot2, come spostare l'istogramma?
Sto cercando di imparare R e l'ho appena iniziato leggendo il libro "Programmazione pratica con R". Ho riscontrato un problema e non posso continuare perché mi dà molto fastidio. Come esercizio, dovrei sperimentare con il pacchetto ggplot2 e creare un istogramma. Il codice da utilizzare è il seguente:
x <- c(1, 2, 2, 2, 3, 3)
qplot(x, binwidth = 1)
e l'istogramma dovrebbe assomigliare a quello nell'immagine uno. Tuttavia, quando eseguo il codice il mio istogramma non assomiglia a quello nell'immagine (anche se dovrebbe) e assomiglia a quello nell'immagine 2. È fondamentalmente lo stesso ma 0,5 decimali a sinistra di dove dovrebbe essere.
Qualcuno può dirmi perché l'istogramma non ha lo stesso aspetto dell'immagine 1 e come correggere il codice per farlo sembrare così?
Immagine 1: https://i.stack.imgur.com/dssBQ.jpg Immagine 2: https://i.stack.imgur.com/wUk1i.jpg
Risposte
Sto usando ggplot2_3.3.2 con R versione 4.0.3.
Ottengo lo stesso grafico che hai tu piuttosto che la trama esposta in https://rstudio-education.github.io/hopr/packages.html#packages-1.
Non sono riuscito a trovare quale versione di ggplot è utilizzata nel libro, probabilmente del 2014 circa sulla base di parte del testo. Tenendo presente il commento di @ the_one_neuron, sospetto che questo abbia qualcosa a che fare con le modifiche a ggplot2 da quando il libro è stato scritto.
Il problema è il raggruppamento o più colloquialmente "porte e post": si desidera che il valore 1 sia classificato tra 1 e <2 (centrato su 1,5) anziché tra 0 e 1 (centrato su 0,5).
C'è una spiegazione molto più dettagliata da @ r2evans in Perché geom_histogram inizia al limite inferiore del bin negativo anche se tutti i valori sono> 0? .
Ad ogni modo, ecco un trucco per ottenere un risultato simile al grafico previsto.
library(ggplot2)
x <- c(1, 2, 2, 2, 3, 3)
qplot(x, binwidth = 1, breaks = 1:4 - 0.000001, xlim = c(0, 4))
Creato il 15/01/2021 dal pacchetto reprex (v0.3.0)
Potresti provare a fare qualcosa del genere. Non è perfetto ma è molto vicino
qplot(x, binwidth = 1, xlim =c(0,NA), ylab = "count")