【R tips】ggplot2でラベルを好きな順番に並べる方法

タグ: #research #R #ggplot2


Introduction

ggplot2で色分けなどにつかったラベルをレジェンドに表示すると文字順にソートされるので、これを回避する方法。


解決策

データフレームを作る

> test <- data.frame(x=rnorm(10), label = c(rep("b",5),rep("a",5)))
> test
            x label
1   0.2221520     b
2   1.2009898     b
3   0.6672509     b
4   1.9525818     b
5   0.5154996     b
6   0.2365778     a
7  -1.9792533     a
8  -0.3790092     a
9   1.6983747     a
10  1.2131910     a
>

データフレームを作る際に文字列を含むベクトルを要素にすると、その列はfactor型になる。

> is.factor(test$label)
[1] TRUE
> is.factor(test$x)
[1] FALSE

Labelsは自動で文字の順番にソートされる。

> levels(test$label)
[1] "a" "b"

この状態でグラフをかくとレジェンドのラベルの順番は自動でソートされた順番になる。

> plt_test <- ggplot(data=test, aes(x=x, color=label)) +
    geom_histogram()
> ggsave(plot = plt_test, filename = "test.png")

これを"b","a"の順番にしたい場合には、データフレームを作るときにfactor()levelsを指定しておけば良い。

> test2 <- data.frame(x=rnorm(10), label = factor(c(rep("b",5),rep("a",5)),levels = c("b","a")))
> test2
             x label
1  -1.22230476     b
2   0.09763175     b
3   0.07651087     b
4  -2.37786336     b
5   0.38975093     b
6   0.09128582     a
7  -0.40383193     a
8  -0.43032947     a
9   1.13458979     a
10  1.69728098     a
> levels(test2$label)
[1] "b" "a"

このデータフレームを使えばグラフのラベルのレジェンドの順番も"b","a"になる。

> plt_test2 <- ggplot(data=test2, aes(x=x, color=label)) +
    geom_histogram()
> ggsave(plot = plt_test2, filename = "test2.png")