ggplot2, wie verschiebt man das Histogramm?

Jan 15 2021

Ich versuche R zu lernen und habe gerade damit begonnen, das Buch "Hands-On Programming with R" durchzugehen. Ich bin auf ein Problem gestoßen und kann nicht weitermachen, weil es mich sehr stört. Als Übung soll ich mit dem Paket ggplot2 experimentieren und ein Histogramm erstellen. Der zu verwendende Code lautet wie folgt:

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

qplot(x, binwidth = 1)

und das Histogramm sollte in Bild eins so aussehen. Wenn ich den Code ausführe, sieht mein Histogramm jedoch nicht wie das auf dem Bild aus (obwohl es sollte) und sieht auch so aus wie in Bild 2. Es ist im Grunde das gleiche, aber 0,5 Dezimalstellen links von der Stelle, an der es sein sollte.

Können mir einige bitte sagen, warum das Histogramm nicht so aussieht wie in Bild 1 und wie man den Code repariert, damit er so aussieht?

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

Antworten

2 Peter Jan 15 2021 at 23:25

Ich verwende ggplot2_3.3.2 mit R Version 4.0.3.

Ich erhalte das gleiche Diagramm wie Sie und nicht die Darstellung wie in https://rstudio-education.github.io/hopr/packages.html#packages-1.

Ich konnte nicht finden, welche Version von ggplot in dem Buch verwendet wird, möglicherweise ab etwa 2014, basierend auf einem Teil des Textes. In Anbetracht des Kommentars von @ the_one_neuron vermute ich, dass dies etwas mit Änderungen an ggplot2 zu tun hat, seit das Buch geschrieben wurde.

Das Problem ist das Binning oder umgangssprachlich "Tore und Pfosten": Sie möchten, dass der Wert 1 zwischen 1 und <2 (zentriert auf 1,5) und nicht zwischen 0 und 1 (zentriert auf 0,5) gruppiert wird.

Es gibt eine viel detailliertere Erklärung von @ r2evans unter Warum beginnt geom_histogram bei der unteren Grenze des negativen Bin, obwohl alle Werte> 0 sind? .

Wie auch immer, hier ist ein Fudge, um das Ergebnis ähnlich wie in Ihrem erwarteten Diagramm zu erhalten.


library(ggplot2)

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

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

Erstellt am 1521-01-15 vom reprex-Paket (v0.3.0)

the_one_neuron Jan 15 2021 at 21:53

Sie könnten versuchen, so etwas zu tun. Es ist nicht perfekt, aber es ist sehr nah

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