ggplot2, ¿cómo cambiar el histograma?

Jan 15 2021

Estoy tratando de aprender R y lo comencé leyendo el libro "Programación práctica con R". Encontré un problema y no puedo continuar porque me molesta mucho. Como ejercicio, se supone que debo experimentar con el paquete ggplot2 y hacer un histograma. El código a utilizar es el siguiente:

x <- c(1, 2, 2, 2, 3, 3)

qplot(x, binwidth = 1)

y el histograma debería verse así en la imagen uno. Sin embargo, cuando ejecuto el código, mi histograma no se parece al de la imagen (aunque debería) y se ve así en la imagen 2. Es básicamente lo mismo, pero 0,5 decimales a la izquierda de donde debería estar.

¿Pueden algunos decirme por qué el histograma no se ve igual que en la imagen 1 y cómo corregir el código para que se vea así?

Foto 1: https://i.stack.imgur.com/dssBQ.jpg Imagen 2: https://i.stack.imgur.com/wUk1i.jpg

Respuestas

2 Peter Jan 15 2021 at 23:25

Estoy usando ggplot2_3.3.2 con R versión 4.0.3.

Obtengo el mismo gráfico que tú en lugar del gráfico que se establece en https://rstudio-education.github.io/hopr/packages.html#packages-1.

No pude encontrar qué versión de ggplot se usa en el libro, posiblemente de alrededor de 2014 según parte del texto. Teniendo en cuenta el comentario de @ the_one_neuron, sospecho que esto tiene algo que ver con los cambios en ggplot2 desde que se escribió el libro.

El problema es una agrupación o más coloquialmente 'puertas y publicaciones': desea que el valor 1 se agrupe entre 1 y <2 (centrado en 1,5) en lugar de entre 0 y 1 (centrado en 0,5).

Hay una explicación mucho más detallada de @ r2evans en ¿Por qué geom_histogram comienza en el límite inferior del bin negativo aunque todos los valores son> 0? .

De todos modos, aquí hay un truco para obtener un resultado similar al gráfico esperado.


library(ggplot2)

x <- c(1, 2, 2, 2, 3, 3)

qplot(x, binwidth = 1, breaks = 1:4 - 0.000001, xlim = c(0, 4))

Creado el 15-01-2021 por el paquete reprex (v0.3.0)

the_one_neuron Jan 15 2021 at 21:53

Podrías intentar hacer algo como esto. No es perfecto pero está muy cerca

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