http://r4ds.had.co.nz/data-visualisation.html#statistical-transformations
今回のテーマは棒グラフ。前回までは自動車に関するデータを使っていたが、棒グラフパートではダイヤモンドに関するデータセットを用いる。列の種類は「price(価格), carat(キャラット), color(色), clarity(透明度)」。とはいえ基本は同じである。まずは、ライブラリを読み込む。
library(tidyverse)
棒グラフ
ggplot(data = diamonds)+ geom_bar(mapping = aes(x = cut))
geom_barで棒グラフを作成できる。x軸はcutで指定しているが、y軸は指定していない。この場合、おそらくデータ数をcountとしてy軸に設定している。
この下に長々と解説があったのだが、ちょっと翻訳が難しかったので省略・・・。スミマセン。
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = cut))
fii(塗りつぶし)を指定することもできる。
もちろん透明度ごとに色分けなどもできるのだが、その際にpositionというものを考えなくてはならない。positionには以下の種類がある。
- stack 色分けされるカテゴリを積み重ねるようにして描画する
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity))
- identity 各カテゴリが独立して描画される(?)。棒グラフだと各カテゴリが重なってしまうためおすすめできない
ggplot(data = diamonds, mapping = aes(x = cut, colour = clarity)) + geom_bar(fill = NA, position = "identity")
※オーバラップをわかりやすくするため、塗りつぶしを無しにしている
- fill 百分率(%)のように描画される
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "fill")
- dodge 各カテゴリが横並びに描画される。比較がしやすい
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")
ところで、このpositionだがもちろん点のプロットにも使える。そして特に有効なものとしてjitterというものがある。まずは、普通にプロットした状態のものを見てみる。
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy))
実はこのデータセットのデータ総数は234個なのだが、実際にプロットされるのは126個しかない。なぜこのような現象が起こるかというと、データをグッリド上に置くために丸めているからだ。その課程で複数のデータが同一の値をとってしまい、点が重なってしまう。この問題をOverplottingという。これを防ぐためにはpositionをjitterにすればよい。
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy), position = "jitter")
すると点が前のものよりも自然な散らばり方をしていることがわかる。こうすることでより正確な測定や計算を行うことができる。
なお、各positionの説明は?をつけることで見ることができる。
?position_jitter
もしかしたら英語かもしれないので読める人は是非・・・。ググればわかるけど。