Как изменить порядок меток фасетов в ggplot (настраиваемые метки переноса фасетов) - PullRequest
34 голосов
/ 30 марта 2011

Я построил фасетную диаграмму, используя 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.

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

Ответы [ 2 ]

44 голосов
/ 30 марта 2011

Не полагайтесь на порядок уровней по умолчанию, наложенный 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

1 голос
/ 22 сентября 2017

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

 [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])

Он заменяет уровни типа «А1» на «А01», а затем переупорядочивает их в соответствии с ними.Я уверен, что вы могли бы сделать это намного эффективнее, но это делает свою работу.

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

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