web-dev-qa-db-ja.com

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。

どうやってやるの ?

37
Jana

指定するグループ化変数が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))

これを使用して、必要な順序weでパネルを描画できます。

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

生成されるもの:

facets wrapped

同様の問題に取り組んでいます。デフォルトでは次のようなレベルがあります。

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

アルファベット順のため、2番目のレベルは適切ではありません。

これは私が注文を修正するためにやっていることです:

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」に置き換え、これらに従ってレベルを並べ替えます。あなたはこれをもっと効率的に行うことができると確信していますが、それは仕事をします。

元の問題に対処するために適応させることができます。

1
DataWookie