Как определить количество тиков в сгруппированном факторе, используя в ggplot - PullRequest
0 голосов
/ 15 января 2019

У меня есть следующие данные:

library(tidyverse)
mydat <- structure(list(group = structure(1:6, .Label = c(
  "(0,1e+06]",
  "(1e+06,2e+06]", "(2e+06,3e+06]", "(3e+06,4e+06]", "(4e+06,5e+06]",
  "(5e+06,6e+06]"
), class = "factor"), n = c(
  1446801L, 47133L,
  22577L, 14941L, 10747L, 8703L
), log_n = c(
  6.16040880026537, 4.67332508334081,
  4.3536662329829, 4.17437966574899, 4.031287248877, 3.93966898352233
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))

mydat
#> # A tibble: 6 x 3
#>   group               n log_n
#>   <fct>           <int> <dbl>
#> 1 (0,1e+06]     1446801  6.16
#> 2 (1e+06,2e+06]   47133  4.67
#> 3 (2e+06,3e+06]   22577  4.35
#> 4 (3e+06,4e+06]   14941  4.17
#> 5 (4e+06,5e+06]   10747  4.03
#> 6 (5e+06,6e+06]    8703  3.94

На самом деле количество строк составляет до 1000 строк.

Тогда я попытался построить сюжет следующим образом:

   p <-  mydat %>% 
      ggplot(aes(x = group, y = log_n)) +
      geom_col() +
      coord_flip() +
      scale_x_discrete(limits = rev(levels(mydat$group))) +
      theme_bw() +
      theme(strip.background = element_blank(), strip.text = element_text(size = 12))
 p

Который производит это:

enter image description here

Я хочу уменьшить количество тиков по оси Y (group) до 3 тиков. Я попробовал это, но не получилось:

  p + scale_y_continuous(breaks = pretty(mydat$group, n = 3))

Какой правильный способ сделать это?


Обновлено

После того, как я попробовал подход @astrofunkswag. Я получаю этот сюжет, где порядок обратный. Я хочу сохранить тот же порядок, что и раньше:

enter image description here

1 Ответ

0 голосов
/ 15 января 2019
p + scale_x_discrete(limits = rev(levels(mydat$group)), breaks = mydat$group[pretty(1:nrow(mydat), 3)])

Пара вопросов:

  • coord_flip просто помещает значение x на вертикальную ось, но оно все равно x

  • Ваша переменная group является фактором, а не числом, поэтому вам нужно либо использовать scale_x_discrete, как я это делал в приведенном выше коде, либо преобразовать этот столбец другим способом

Я выбрал 3 элемента из group, используя pretty аналогично тому, как вы это делали, но вы можете получить разные элементы, если вам не понравится полученный сюжет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...