Установка ширины бина ggplot2 в geom_histogram при использовании scale_x_log10 приводит к странной гистограмме.
Я хочу настроить ширину бина без обходного пути, найденного здесь.
Одна из причин, по которой я не хочу использовать обходной путь, заключается в том, что он мне не нравится; кажется, что в ggplot должен быть встроен лучший способ. Другая причина в том, что это не сработало, когда я попробовал это на своем наборе данных.
Я использую facet_wrap, поэтому решение должно с ним работать, но код примера, который я использую, урезан до минимума.
Когда я разрешаю ширину бина по умолчанию, я получаю достойную гистограмму:
library(ggplot2)
data(diamonds)
ggplot(data=diamonds, aes(x=price/carat)) +
geom_histogram() +
scale_x_log10()# +
# facet_wrap(~cut, ncol=1, scales='free_y')
Но когда я устанавливаю ширину бина, я получаю равномерное распределение, заполняющее весь график (или один бин?) независимо от ширины бина (за исключением случая, когда ширина бина = 1, что создает то, что выглядит как два бина или бимодальное равномерное распределение? ):
ggplot(data=diamonds, aes(x=price/carat)) +
geom_histogram(binwidth=10) +
scale_x_log10()# +
# facet_wrap(~cut, ncol=1, scales='free_y')
Установка разрывов создает тот же заполненный квадрат с новыми разрывами. Настройка ограничивает очистку графика.
Установка ширины бина из самого ggplot() оставляет график неизменным по сравнению с шириной бина по умолчанию, предположительно потому, что geom_histogram переопределяет его. Кроме того, scale_x_log10 не принимает ширину бина.
Он работает для установки ширины бина при использовании scale_x_continuous вместо scale_x_log10.
Попробуйте ввести часть общей ширины, чтобы ширина ячейки относилась к количеству ячеек как что-то вроде 1/(n_bins - 1)
.
library(ggplot2)
data(diamonds)
ggplot(data=diamonds, aes(x=price/carat)) +
geom_histogram(binwidth = 1/50) +
scale_x_log10()
Но мне интересно, почему это работает. Что происходит? Откуда он знает, что мы хотим установить ширину интервала относительно масштаба, а не буквально 0,02?
И почему бы ему не установить постоянные значения ширины бина, которые уменьшаются по ширине в пикселях в зависимости от масштаба?
geom_histogram
— это псевдоним для geom_bar
плюс stat_bin
. Я думаю, что в данном случае используется stat_bin
для интерпретации аргумента binwidth
. Описание для binwidth
в stat_bin
: по умолчанию 1/30 диапазона данных. Таким образом, вы устанавливаете ширину бина в зависимости от диапазона ваших данных. Я не уверен, почему он не использует абсолютную шкалу ваших данных. Возможно, поскольку это преобразованная шкала, диапазон по умолчанию просто равен 1. Не совсем уверен.
Идеальный! Спасибо!