R 如何更改ggplot中镶嵌面标签的顺序(自定义镶嵌面包裹标签)

R 如何更改ggplot中镶嵌面标签的顺序(自定义镶嵌面包裹标签),r,ggplot2,R,Ggplot2,我用ggplot绘制了一个刻面图,下面是图 我的问题是,facetsLabel是按字母顺序排序的,例如:E1、E10、E11、E13、E2、E3、I1、I10、I2,但我需要它们是像E1、I1、E2、I2、E3、E10、I10、E11、E13这样的自定义顺序 如何做到这一点?如果您提供的分组变量不是一个因子,则不要依赖于因子或ggplot内部施加的默认级别顺序。自己明确设置级别 dat <- data.frame(x = runif(100), y = runif(100),

我用ggplot绘制了一个刻面图,下面是图

我的问题是,facetsLabel是按字母顺序排序的,例如:E1、E10、E11、E13、E2、E3、I1、I10、I2,但我需要它们是像E1、I1、E2、I2、E3、E10、I10、E11、E13这样的自定义顺序


如何做到这一点?

如果您提供的分组变量不是一个因子,则不要依赖于因子或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) # 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))
现在,我们可以使用此命令按所需顺序绘制面板:

产生:


只是在处理一个类似的问题。默认情况下,我有如下级别:

 [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,然后根据这些级别重新排序。我相信你可以更有效地完成这项工作,但它确实起到了作用


它可以用来解决最初的问题。

重新安排潜在因素的顺序。您可以使用relevel、reorder或定制订单和使用系数。这是否回答了您的问题?与上面相同,但如果数据本身已处于自定义顺序,则您希望组变量处于该顺序,而不希望手动按该顺序创建向量:dat
 [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])