ggplot2, как сдвинуть гистограмму?

Jan 15 2021

Я пытаюсь изучить R, и я только начал это, прочитав книгу «Практическое программирование с R». Я столкнулся с проблемой и не могу продолжить, потому что меня это очень беспокоит. В качестве упражнения я должен поэкспериментировать с пакетом ggplot2 и построить гистограмму. Используемый код выглядит следующим образом:

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

qplot(x, binwidth = 1)

и гистограмма должна выглядеть так, как на рисунке 1. Однако, когда я запускаю код, моя гистограмма не похожа на гистограмму на картинке (хотя должна) и выглядит так, как на картинке 2. Она в основном такая же, но 0,5 десятичных знаков слева от того места, где она должна быть.

Подскажите, пожалуйста, почему гистограмма не выглядит так, как на рисунке 1, и как исправить код, чтобы она выглядела так?

Картинка 1: https://i.stack.imgur.com/dssBQ.jpg Рисунок 2: https://i.stack.imgur.com/wUk1i.jpg

Ответы

2 Peter Jan 15 2021 at 23:25

Я использую ggplot2_3.3.2 с R версии 4.0.3.

Я получаю тот же график, что и вы, а не график, представленный в https://rstudio-education.github.io/hopr/packages.html#packages-1.

Я не смог найти, какая версия ggplot используется в книге, возможно, примерно с 2014 года на основе некоторого текста. Принимая во внимание комментарий @ the_one_neuron, я подозреваю, что это как-то связано с изменениями в ggplot2 с момента написания книги.

Проблема заключается в одной группировке или нескольких разговорных «воротах и ​​столбах»: вы хотите, чтобы значение 1 было разделено между 1 и <2 (с центром на 1,5), а не между 0 и 1 (с центром на 0,5).

Есть гораздо более подробное объяснение от @ r2evans в Почему geom_histogram начинается с отрицательного нижнего предела бина, даже если все значения> 0? .

В любом случае, вот уловка, чтобы получить результат, аналогичный ожидаемому графику.


library(ggplot2)

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

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

Создано 15.01.2021 пакетом REPEX (v0.3.0)

the_one_neuron Jan 15 2021 at 21:53

Вы можете попробовать сделать что-то подобное. Это не идеально, но очень близко

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