ggplot2, comment décaler l'histogramme?

Jan 15 2021

J'essaie d'apprendre R et je viens de commencer cela en parcourant le livre "Hands-On Programming with R". J'ai rencontré un problème et je ne peux pas continuer car cela me dérange beaucoup. En guise d'exercice, je suis censé expérimenter le package ggplot2 et créer un histogramme. Le code à utiliser est le suivant:

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

qplot(x, binwidth = 1)

et l'histogramme devrait ressembler à celui de la première image. Cependant, lorsque j'exécute le code, mon histogramme ne ressemble pas à celui de l'image (même s'il devrait) et ressemble à celui de l'image 2. C'est fondamentalement le même mais 0,5 décimale à gauche de l'endroit où il devrait être.

Certains peuvent-ils me dire pourquoi l'histogramme ne ressemble-t-il pas à l'image 1 et comment corriger le code pour qu'il ressemble à ça?

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

Réponses

2 Peter Jan 15 2021 at 23:25

J'utilise ggplot2_3.3.2 avec la version R 4.0.3.

J'obtiens le même graphique que vous plutôt que l'intrigue comme indiqué dans https://rstudio-education.github.io/hopr/packages.html#packages-1.

Je n'ai pas pu trouver quelle version de ggplot est utilisée dans le livre, probablement d'environ 2014 sur la base d'une partie du texte. Compte tenu du commentaire de @ the_one_neuron, je soupçonne que cela a quelque chose à voir avec les changements apportés à ggplot2 depuis que le livre a été écrit.

Le problème est celui du binning ou plus communément «portes et poteaux»: vous voulez que la valeur 1 soit comprise entre 1 et <2 (centré sur 1,5) plutôt qu'entre 0 et 1 (centré sur 0,5).

Il y a une explication beaucoup plus détaillée de @ r2evans à Pourquoi geom_histogram commence-t-il à la limite inférieure du bac négatif même si toutes les valeurs sont> 0? .

Quoi qu'il en soit, voici un fudge pour obtenir le résultat similaire à votre graphique attendu.


library(ggplot2)

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

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

Créé le 2021-01-15 par le package reprex (v0.3.0)

the_one_neuron Jan 15 2021 at 21:53

Vous pouvez essayer de faire quelque chose comme ça. Ce n'est pas parfait mais c'est très proche

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