ggplot2, как сдвинуть гистограмму?
Я пытаюсь изучить 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
Ответы
Я использую 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)
Вы можете попробовать сделать что-то подобное. Это не идеально, но очень близко
qplot(x, binwidth = 1, xlim =c(0,NA), ylab = "count")