ggplot2, como mudar o histograma?

Jan 15 2021

Estou tentando aprender R e comecei isso lendo o livro "Programação prática com R". Encontrei um problema e não consigo continuar porque me incomoda muito. Como exercício, devo experimentar o pacote ggplot2 e fazer um histograma. O código a ser usado é o seguinte:

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

qplot(x, binwidth = 1)

e o histograma deve ser semelhante ao da figura um. No entanto, quando executo o código, meu histograma não se parece com o da figura (embora devesse) e se parece com o da figura 2. É basicamente o mesmo, mas 0,5 decimais à esquerda de onde deveria estar.

Alguns podem me dizer por que o histograma não parece o mesmo da figura 1 e como consertar o código para que fique assim?

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

Respostas

2 Peter Jan 15 2021 at 23:25

Estou usando ggplot2_3.3.2 com R versão 4.0.3.

Recebo o mesmo gráfico que você, em vez do gráfico conforme estabelecido em https://rstudio-education.github.io/hopr/packages.html#packages-1.

Não consegui descobrir qual versão do ggplot é usada no livro, possivelmente por volta de 2014 com base em parte do texto. Tendo em mente o comentário de @ the_one_neuron, suspeito que isso tenha algo a ver com as mudanças no ggplot2 desde que o livro foi escrito.

O problema é categorizar ou mais coloquialmente 'portas e postagens': você deseja que o valor 1 seja categorizado entre 1 e <2 (centralizado em 1.5) em vez de entre 0 e 1 (centralizado em 0,5).

Há uma explicação muito mais detalhada de @ r2evans em Por que geom_histogram começa no limite inferior de bin negativo mesmo que todos os valores sejam> 0? .

De qualquer forma, aqui está uma falha para obter o resultado semelhante ao seu 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))

Criado em 2021-01-15 pelo pacote reprex (v0.3.0)

the_one_neuron Jan 15 2021 at 21:53

Você poderia tentar fazer algo assim. Não é perfeito mas está muito próximo

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