ggplot2 で、グラフを作成する場合、x軸とy軸の座標を意識する必要があります。この点は、慣れないと難しいかもしれません。ボックスプロットを例に解説します。
# 1サンプルあたり100個のデータを持つ2サンプルを生成。
input_data <- tibble("Sample1" = rnorm(100),
"Sample2" = rnorm(100))
>
> input_data
# A tibble: 100 x 2
Sample1 Sample2
<dbl> <dbl>
1 0.0145 0.550
2 1.00 -0.627
3 0.193 -0.300
4 1.45 0.612
5 -1.25 -0.134
6 0.965 0.113
7 0.0219 0.351
8 0.0158 -1.11
9 0.802 0.357
10 -0.387 -0.828
# … with 90 more rows
上記のような2サンプルのデータがあったとして、従来の関数を使うのであれば、boxplot(input_data)
と書くだけで良いです。しかし、同じ感覚で、geom_boxplot を使おうとすると、下記のような警告が表示されます。
> ggplot(input_data, aes(Sample1, Sample2)) + geom_boxplot()
警告メッセージ:
Continuous x aesthetic -- did you forget aes(group=...)?
表示されるプロット図も、期待されるイメージと違います。
この原因は、aes() に渡しているのは、xの座標とyの座標として扱われるからです。省略せずに書くと、aes(x = Sample1, y = Sample2) となります。そのため、上記のような誤った結果になっています。
実際に、boxplot に表示させたいのは、下記のイメージのはずです。
つまり、x軸に指定するのは、「Sample1 に属するか Sample2 に属するか」という情報、y軸に指定するのは、データの値(ここでは read_count という名前)でなければなりません。そのためには、input_data に gather() 関数を使って、プロット用のデータに変換する必要があります。
plot_data <- input_data %>%
gather(Sample1, Sample2, key = "sample", value = "read_count")
> plot_data
# A tibble: 200 x 2
sample read_count
<chr> <dbl>
1 Sample1 0.0145
2 Sample1 1.00
3 Sample1 0.193
4 Sample1 1.45
5 Sample1 -1.25
6 Sample1 0.965
7 Sample1 0.0219
8 Sample1 0.0158
9 Sample1 0.802
10 Sample1 -0.387
# … with 190 more rows
変換後のデータ (plot_data) は、元のデータで横に並んでいたサンプルが、縦に並ぶイメージです。sample 列は、”Sample1″ または “Sample2″ の文字列です。数値データは、”read_count” という列名を付けて、縦に格納されています(1サンプルあたり100行あったので、200行のデータになります)。この plot_data を ggplot に用います。
ggplot(plot_data, aes(x = sample, y = read_count)) + geom_boxplot()
これで想定したイメージのボックスプロットになります。最初は、馴染めないかもしれません。しかし、この仕組みを理解すると、ある値に応じて、色を変えたり、ドットの大きさを変えたり、複雑な表現も読みやすく記述できるようになります。
「ggplot2: ボックスプロット (box plot)」への3件のフィードバック
コメントは停止中です。