Добавление разрывов для подсчета (ось Y) гистограммы в соответствии с диапазоном min-max отсчетов в R? - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть график гистограммы ggplot. На оси х у меня есть фактор-переменная (1,2,3,4, ..)

На оси Y у меня есть счет.

Я хочу, чтобы моя ось y была от минимального счета до максимального, на 1.

Я играю с scale_y_discrete, но не могу взять min(count), max(count) и прибавить = 1.

Пожалуйста, сообщите.

df <- structure(list(user_id = c(1L, 1L, 3L, 3L, 4L, 4L, 4L, 6L, 8L, 
8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L), obs_id = c(1L, 
30L, 133L, 134L, 144L, 160L, 162L, 226L, 272L, 273L, 274L, 275L, 
276L, 299L, 307L, 322L, 323L, 324L, 325L, 326L, 327L, 328L), 
    n = c(6L, 6L, 10L, 6L, 11L, 11L, 12L, 6L, 3L, 2L, 5L, 2L, 
    3L, 5L, 12L, 11L, 25L, 7L, 5L, 2L, 5L, 17L)), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -22L), vars = "user_id", drop = TRUE, .Names = c("user_id", 
"obs_id", "n"), indices = list(0:1, 2:3, 4:6, 7L, 8:12, 13:21), group_sizes = c(2L, 
2L, 3L, 1L, 5L, 9L), biggest_group_size = 9L, labels = structure(list(
    user_id = c(1L, 3L, 4L, 6L, 8L, 9L)), class = "data.frame", row.names = c(NA, 
-6L), vars = "user_id", drop = TRUE, .Names = "user_id"))

1 Ответ

0 голосов
/ 06 сентября 2018

Вы можете сделать функцию для breaks, которая принимает пределы оси в качестве аргумента.

Из документации scale_continuous, breaks можно взять:

Функция, которая принимает пределы как входные данные и возвращает разрывы как выходные данные

Вот пример, где я иду от 0 до максимального предела оси Y на 1. (Я использую 0 вместо минимального числа, потому что гистограммы начинаются с 0.)

x в функции - это пределы оси на графике, рассчитанные с помощью ggplot() или установленные пользователем.

byone = function(x) {
     seq(0, max(x), by = 1)
}

Вы можете передать эту функцию на breaks в scale_y_continuous(). limits извлекаются непосредственно из графика и передаются первому аргументу функции.

ggplot(df, aes(user_id)) +
     geom_histogram() +
     scale_y_continuous(breaks = byone)

enter image description here

...