Установить ручной порядок гистограммы с помощью ggplot2 - PullRequest
1 голос
/ 18 марта 2020

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

# A tibble: 7 x 2
  Time        Number
  <chr>        <dbl>
1 0 hours          7
2 1-5 hours       20
3 6-10 hours       8
4 11-20 hours     13
5 21-40 hours      6
6 40+ hours        3
7 No idea          6

Теперь я хотел сделать из него гистограмму, используя следующий код (tidyverse):

time_hist = time %>%
    ggplot(aes(x=Time, y=Number, fill=Time)) +
    geom_bar(width=1, stat="identity") +
    theme(axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank()) +
    labs(fill="Time", x="", y="Number", title = "How much time does this problem cost you?") +
    scale_fill_discrete(breaks=c("0 hours", "1-5 hours", "6-10 hours", "11-20 hours", "21-40 hours", "40+ hours", "No idea"))
  plot(time_hist)

Что привело к следующая гистограмма:

enter image description here

Однако я хочу, чтобы столбец «6-10 часов» был третьим вместо 6-го бара. Как мне этого добиться?

1 Ответ

2 голосов
/ 18 марта 2020

Попробуйте превратить Time в фактор - тогда ось будет отображаться по порядку уровней факторов. Если вы используете forcats::as_factor (вместо as.factor), уровни создаются в том порядке, в котором они появляются (вместо лексикографически отсортированного)

library(tidyverse)

time <- tibble::tribble(
  ~ Time, ~ Number,
  "0 hours", 7,
  "1-5 hours",20,
  "6-10 hours",8,
  "11-20 hours",13,
  "21-40 hours",6,
  "40+ hours",3,
  "No idea", 6
)

time <- time %>% mutate(Time = as_factor(Time))

Когда я использую код построения, который вы показываете выше, я теперь получаю это цифра: enter image description here

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