ggplot2, come spostare l'istogramma?

Jan 15 2021

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

2 Peter Jan 15 2021 at 23:25

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)

the_one_neuron Jan 15 2021 at 21:53

Potresti provare a fare qualcosa del genere. Non è perfetto ma è molto vicino

qplot(x, binwidth = 1, xlim =c(0,NA), ylab = "count")