Как установить ширину бина ggplot2 в geom_histogram при использовании scale_x_log10?

Установка ширины бина 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.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
923
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте ввести часть общей ширины, чтобы ширина ячейки относилась к количеству ячеек как что-то вроде 1/(n_bins - 1).

library(ggplot2)

data(diamonds)
ggplot(data=diamonds, aes(x=price/carat)) +
  geom_histogram(binwidth = 1/50) +
  scale_x_log10()

Идеальный! Спасибо!

Kaleb Coberly 09.12.2020 21:53

Но мне интересно, почему это работает. Что происходит? Откуда он знает, что мы хотим установить ширину интервала относительно масштаба, а не буквально 0,02?

Kaleb Coberly 09.12.2020 21:58

И почему бы ему не установить постоянные значения ширины бина, которые уменьшаются по ширине в пикселях в зависимости от масштаба?

Kaleb Coberly 09.12.2020 22:02
geom_histogram — это псевдоним для geom_bar плюс stat_bin. Я думаю, что в данном случае используется stat_bin для интерпретации аргумента binwidth. Описание для binwidth в stat_bin: по умолчанию 1/30 диапазона данных. Таким образом, вы устанавливаете ширину бина в зависимости от диапазона ваших данных. Я не уверен, почему он не использует абсолютную шкалу ваших данных. Возможно, поскольку это преобразованная шкала, диапазон по умолчанию просто равен 1. Не совсем уверен.
da11an 09.12.2020 23:59

Другие вопросы по теме