Подтвердить что ты не робот

Как изменить порядок меток граней в ggplot (пользовательские метки обертки граней)

Я построил ggplot график, используя ggplot и вот график

http://i.stack.imgur.com/5qXF1.png

У меня проблема в том, что фасеты (метки) сортируются в алфавитном порядке (например, E1, E10, E11, E13, E2, E3, I1, I10, I2), но мне нужно, чтобы они были в индивидуальном порядке, например E1, I1, E2, I2, E3, E10, I10, E11, E13.

Как я могу это сделать?

4b9b3361

Ответ 1

Не полагайтесь на порядок по умолчанию уровней, налагаемых factor() или внутренне на ggplot, если переменная группировки, которую вы поставляете, является не фактором. Задайте уровни явно сами.

dat <- data.frame(x = runif(100), y = runif(100), 
                  Group = gl(5, 20, labels = LETTERS[1:5]))
head(dat)
with(dat, levels(Group))

Что делать, если я хочу их в этом произвольном порядке?

set.seed(1)
with(dat, sample(levels(Group)))

Чтобы сделать это, установите уровни так, как вы хотите.

set.seed(1) # reset the seed so I get the random order form above
dat <- within(dat, Group <- factor(Group, levels = sample(levels(Group))))
with(dat, levels(Group))

Теперь мы можем использовать это для рисования панелей в нужном порядке:

require(ggplot2)
p <- ggplot(dat, aes(x = x)) + geom_bar()
p + facet_wrap( ~ Group)

Что производит:

facets wrapped

Ответ 2

Просто работа над подобной проблемой. У меня есть уровни, которые по умолчанию выглядят следующим образом:

 [1] "A1"  "A10" "A2"  "A3"  "A4"  "A5"  "A6"  "A7"  "A8"  "A9" 
[11] "B1"  "B2"  "B3"  "B4"  "B5"  "B6"  "B7"  "B8"  "B9" 

Обратите внимание, что второй уровень неуместен из-за алфавитного порядка.

Это то, что я делаю, чтобы исправить порядок:

reorder(factor(fct),
        fct %>%
          str_replace("([[:alpha:]]+)", "\\1|") %>%
          str_split("\\|") %>%
          sapply(function(d) sprintf("%s%02d", d[1], as.integer(d[2]))),
        function(x) x[1])

Он заменяет уровни, такие как "A1", на "A01", а затем переупорядочивает в соответствии с ними. Я уверен, что вы могли бы сделать это намного эффективнее, но он выполняет эту работу.

Он может быть адаптирован для решения исходной проблемы.