Это заняло немного возни. Любопытно, если я упускаю некоторые опции ggplot, чтобы упростить это.
Во-первых, похоже, что вы хотите, чтобы b == 0:9
и b == 360
были в ячейке "0". geom_histogram
хочет нарисовать те, которые центрированы в 5, поэтому, чтобы этот бин был центрирован в 0
, один из вариантов - вручную сдвинуть значения на 5. (См. data$c
ниже.)
Затем,Я хотел убедиться, что новые данные от -5 до +4 были объединены в нулевую группу, поэтому я переключил closed = "left"
.
Затем, чтобы отобразить нулевую ячейку, нам действительно нужно x
, чтобы вернуться к -5, так как ggplot проверяет, находится ли его полная ширина в области графика.
В этот момент он смотрит вправо, кроме вращения. Левый край первого мусорного ведра находится в 12 часов. Чтобы выровнять его центр, нам нужно сместить все это на -pi/36
.
data <- data.frame(b = c(0:360))
data$c <- (data$b %% 360) - 5
ggplot(data, aes(x = c)) +
geom_histogram(binwidth = 10, boundary = 5, fill = 'grey', color = 'black',
closed = "left") +
scale_x_continuous(breaks=seq(0, 270, by=90), limits = c(-5, 355)) +
coord_polar(start = -pi/36)
Альтернативное решение
Если вы не знакомы с geom_histogram
, я обнаружил, что проще сначала выполнить суммирование и переключиться на geom_col
:
sum_data <- data %>% dplyr::count(grp = (floor(b/10)*10) %% 360)
ggplot(sum_data, aes(grp, n)) +
geom_col(fill = 'grey', color = 'black') +
scale_x_continuous(breaks=seq(0, 270, by=90), limits = c(-5, 355)) +
coord_polar(start = -pi/36)