cut_width
ничего не знает о физическом l aws Вселенной, поэтому не знает, что carat
должно быть положительным. Посмотрим, почему он это делает. Сейчас я нахожусь на ggplot2-3.2.1
, поэтому некоторые строки могли быть обновлены в более новых версиях.
debugonce(cut_width)
cut_width(diamonds$carat, 0.5)
# debug: {
# x <- as.numeric(x)
# width <- as.numeric(width)
# ...truncated...
Шагайте вниз, пока не будет определено большинство вспомогательных переменных, затем
x_range
# [1] 0.20 5.01
boundary
# [1] 0.25
c(min_x, max_x)
# [1] -0.25 5.51
breaks
# [1] -0.25 0.25 0.75 1.25 1.75 2.25 2.75 3.25 3.75 4.25 4.75 5.25
Важно что мы знаем, что диапазон данных составляет от 0,2 до 5,01 (x_range
), boundary
- это половина width
(по коду), а min_x
определяется другой вспомогательной функцией find_origin
. Почему эта функция считает, что -0,25 - разумное начало первого бункера? Код не очень понятен по этому поводу (я бы спросил авторов).
Если вы хотите его контролировать, добавьте boundary=
:
levels(cut_width(diamonds$carat, 0.5))
# [1] "[-0.25,0.25]" "(0.25,0.75]" "(0.75,1.25]" "(1.25,1.75]" "(1.75,2.25]" "(2.25,2.75]" "(2.75,3.25]" "(3.25,3.75]"
# [9] "(3.75,4.25]" "(4.25,4.75]" "(4.75,5.25]"
levels(cut_width(diamonds$carat, 0.5, boundary=0))
# [1] "[0,0.5]" "(0.5,1]" "(1,1.5]" "(1.5,2]" "(2,2.5]" "(2.5,3]" "(3,3.5]" "(3.5,4]" "(4,4.5]" "(4.5,5]" "(5,5.5]"