如何更改ggplot中的构面标签的顺序(自定义构面包装标签)

时间:2011-03-30 18:37:25

标签: r ggplot2

我使用ggplot绘制了一个构面图,这里是情节

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

我遇到的问题是,facet(标签)按字母顺序排序(例如:E1,E10,E11,E13,E2,E3,I1,I10,I2),但我需要它们是E1之类的自定义顺序, I1,E2,I2,E3,E10,I10,E11,E13。

我该怎么做?

2 个答案:

答案 0 :(得分:44)

如果您提供的分组变量是一个因素,请不要依赖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 :(得分:1)

正在处理类似的问题。我的默认级别如下:

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

它取代了像&#34; A1&#34;用&#34; A01&#34;然后根据这些重新排序。我确信你可以更有效地做到这一点,但它确实能够完成这项工作。

它可以用来解决原始问题。