首页 文章

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

提问于
浏览
34

嗨我在R中使用ggplot绘制了一个facet情节,这里是情节

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

    如果您提供的分组变量是 not 因子,请不要依赖 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

  • 44

    只是在处理类似的问题 . 我的级别默认情况下看起来像这样:

    [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”,然后根据这些重新排序 . 我相信你可以更有效地做到这一点,但它确实能够做到这一点 .

    它可以适应解决原始问题 .

相关问题