ggplot2, jak przesunąć histogram?

Jan 15 2021

Próbuję nauczyć się języka R i właśnie zacząłem to od przeczytania książki „Programowanie praktyczne z R”. Napotkałem problem i nie mogę kontynuować, ponieważ bardzo mi to przeszkadza. W ramach ćwiczenia mam poeksperymentować z pakietem ggplot2 i zrobić histogram. Kod, którego należy użyć, jest następujący:

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

qplot(x, binwidth = 1)

a histogram powinien wyglądać tak, jak na obrazku pierwszym. Jednak gdy uruchamiam kod, mój histogram nie wygląda jak ten na obrazku (chociaż powinien) i wygląda tak jak na obrazku 2. Jest w zasadzie taki sam, ale 0,5 miejsca po przecinku na lewo od miejsca, w którym powinien być.

Czy ktoś może mi powiedzieć, dlaczego histogram nie wygląda tak samo jak na obrazku 1 i jak naprawić kod, aby wyglądał tak?

Obrazek 1: https://i.stack.imgur.com/dssBQ.jpg Zdjęcie 2: https://i.stack.imgur.com/wUk1i.jpg

Odpowiedzi

2 Peter Jan 15 2021 at 23:25

Używam ggplot2_3.3.2 z R w wersji 4.0.3.

Otrzymuję ten sam wykres, co ty, a nie wykres przedstawiony w https://rstudio-education.github.io/hopr/packages.html#packages-1.

Nie mogłem znaleźć wersji ggplot używanej w książce, prawdopodobnie z około 2014 roku na podstawie części tekstu. Mając na uwadze komentarz @ the_one_neuron, podejrzewam, że ma to coś wspólnego ze zmianami w ggplot2 od czasu napisania książki.

Problem polega na kategoryzowaniu lub bardziej potocznie „bramkach i postach”: chcesz, aby wartość 1 była dzielona między 1 a <2 (wyśrodkowany na 1,5), a nie między 0 a 1 (wyśrodkowany na 0,5).

O wiele bardziej szczegółowe wyjaśnienie pochodzi od @ r2evans w Dlaczego geom_histogram zaczyna się od dolnej granicy przedziału ujemnego, mimo że wszystkie wartości są> 0? .

W każdym razie tutaj jest krówka, aby uzyskać wynik podobny do spodziewanego wykresu.


library(ggplot2)

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

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

Utworzono 15.01.2021 r. Przez pakiet reprex (v0.3.0)

the_one_neuron Jan 15 2021 at 21:53

Możesz spróbować zrobić coś takiego. Nie jest doskonały, ale jest bardzo blisko

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