ggplot2を使い始める前に
R グラフィックス クックブック 1回目
ggplot2の利用を開始する前に、ggplot2パッケージの考え方にふれておきます。
データグラフィックス
データ属性からグラフィックス内の視覚属性へのマッピングが発生します。
- データ属性:数値またはカテゴリカルな値
- 視覚属性: との座標値、線の色、棒の高さ
下記の2つは、データの視覚化において同じことを指しています。
データ属性が同じで、視覚属性が異なるだけです。
- ある数を、座標の値で表現すること
- ある数を、点の色で表現する事
グラフィックスの文法は、上記の考え方が中核をなしています。
baseパッケージに含まれるグラフィックス関数は、
データ属性から視覚属性へのマッピングを変えるには、下記を行う必要があります。
- データ属性の構造を変える
- 違うグラフィックス関数を使う
ここで、このメンドクサイ仕様に沿って、グラフを作成してみます。
データ属性はこちら。
> simpledat A1 A2 A3 B1 10 7 12 B2 9 11 6
棒グラフで、視覚化。
> barplot(simpledat, beside = TRUE)
ここから、Bを軸に取る場合は、データ属性の再構築が必要です。
> t(simpledat) B1 B2 A1 10 9 A2 7 11 A3 12 6
この再構築したデータを使って、棒グラフで視覚化。
> barplot(t(simpledat),beside = TRUE)
今度は、折れ線グラフで視覚化。
違うグラフィックス関数を利用して、データ属性の構造も変えるメンドクササ
1本目。Aを軸に取り、B1行を軸に取っています。
> plot(simpledat[1, ], type = "l")
2本目。B2行のデータ。
> lines(simpledat[2, ], type = "l")
もうね。ちゃんちゃらおかしいんですよ。このグラフ。
まず、軸。
A1、A2、A3としてしてほしいところですが、1,2,3、、、、
次、2本目の軸の3の部分。表現しきれてません。
とまぁ、baseパッケージに含まれるグラフィックス関数をディスるのはやめて
ggplot2パッケージを利用してみます。
ggplot2パッケージでのデータ属性
データ属性には、wideフォーマットではなく、longフォーマットが必要になります。
これが、wideフォーマットのデータ
> simpledat A1 A2 A3 B1 10 7 12 B2 9 11 6
上で使ったデータのフォーマットです。
そして、これが、longフォーマットのデータ
> simpledat_long Aval Bval value 1 A1 B1 10 2 A1 B2 9 3 A2 B1 7 4 A2 B2 11 5 A3 B1 12 6 A3 B2 6
データ構造がはげしく異なります。
行列で表現するよりも、1行でまとまっていますので、シンプルな構造です。
このデータをggplot2パッケージの棒グラフで視覚化します。
Aval列を軸に、Bval列でグループ化、value列が軸です。
> ggplot(simpledat_long, aes(x=Aval, y=value, fill=Bval)) + geom_bar(stat="identity",position="dodge")
Aval列とBval列のマッピングを、Aval列でグループ化、Bval列を軸に変更します。
> ggplot(simpledat_long, aes(x=Bval, y=value, fill=Aval)) + geom_bar(stat="identity",position="dodge")
上記の事を行うのに、データ構造の再構築がいりません。
次に、グラフの形を折れ線グラフに変えてみます。
> ggplot(simpledat_long, aes(x=Aval, y=value, colour=Bval, group=Bval)) + geom_line()
グラフの形を変更するのに、
変更した箇所が、aes引数と + geom_line()部分だけです。
また、baseパッケージの関数と異なり、
複数の線が、まとめて描画されるため、表現されない部分が出てきません。
baseパッケージのグラフィックス関数にあったメンドクササ・困った点が
ggplot2パッケージのグラフィックス関数では解消されています。
棒グラフのコマンドと折れ線グラフのコマンドを見ると、
データ属性のコマンド + 視覚属性のコマンドで構成されている気がします。
ここで、ggplot2パッケージで利用される用語を理解して、
視覚化を行うコマンドの構成を理解を深めたいと思います。
用語の定義と理論
抑える用語は、下記のとおりです。
- データ
- 幾何オブジェクト
- エステティック属性 または エステティック
- マッピング
- スケール
- ガイド
データ
視覚化の対象。変数で構成され、データフレームに列で保存される。
幾何オブジェクト
データを表現するために、描画される棒、折れ線、点など。
エステティック属性 または エステティック
幾何オブジェクトのやの位置、線の色、点の形。
ガイド
視覚属性が、データ空間にどのようにマッピングされているか。目盛りやラベル。
上記の内容を理解するために、こんなデータを用いてグラフを作成してみます。
> dat xval yval group 1 1 3 A 2 2 5 B 3 3 6 A 4 4 9 B
まず、データをaes()引数で、エステティックマッピングを行います。
> ggplot(dat,aes(x=xval,y=yval))
エステティックマッピングだけですと、幾何オブジェクトがないため、エラーになります。
次に幾何オブジェクトを指定します。(この例では散布図)
+ geom_point()部分が幾何オブジェクトの指定です。
> ggplot(dat,aes(x=xval,y=yval)) + geom_point()
エステティックマッピングは変数に格納する事ができます。
> p <- ggplot(dat,aes(x=xval,y=yval)) > p + geom_point()
このコマンドは、上記の散布図と同じです。
エステティックマッピングを、変数に取っておけば、
幾何オブジェクトに対するエステティックマッピングを変更する際の
コマンドの変更量も少なくなります。
> p + geom_point(aes(colour=group))
このグラフは、このような構成です。
点の色(幾何オブジェクトに対するエステティックマッピング)を指定してみます。
> p + geom_point(colour="blue")
軸のスケールを変更してみます。
> p + geom_point() + scale_x_continuous(limits=c(0,8))
スケールを変更すると、ガイド(軸のメモリ)も変更されています。
散布図の点の色(幾何オブジェクトに対するエステティックマッピング)のスケールを変更してみます。
> p + geom_point(aes(colour=group)) + scale_colour_manual(values = c("orange","forestgreen"))
ここでも、ガイド(凡例)が変更されています。