ggplotできれいなグラフを描こう
グラフを描くときにどうするか? 何らかのデータを扱う者にとっては共通の悩みだろう. 自分の場合,面倒なときはデータをexcelに落としこんでから簡単にグラフを描いてしまうことが多い.
しかし,次のような場合はどうだろう? Rがサーバーで稼働していて,データもサーバーに保存される.それをいちいちscpやrsyncでローカルに転送してexcelで描写....これが一回ポッキリならまだいいだろう.でも,頻繁に変更が発生するデータだったら?bashスクリプトでも書いて,自動でローカルに転送する?
もし,サーバーでRstudioが稼働しているなら,もっと簡単な方法がある.
Rにはggplotというグラフ描写用のライブラリがある. このライブラリでグラフを描写してしまえばいいのだ.それなら,いちいちローカルに転送せなんでも,グラフを確認できる.
ただし,このggplotは記法だけでなく,考え方も特殊で,ggplot用の考え方でデータフレームを考えないと,わけがわからなくなる.
そこで,自分用のメモを残しておく.
参考にしたリンクとか
http://smrmkt.hatenablog.jp/entry/2013/03/16/170914
http://d.hatena.ne.jp/triadsou/20100528/1275042816
データの準備
library(ggplot2) library(hexbin) library(quantreg) library(reshape2) d_diamonds <- diamonds d_subset <- d_diamonds[,c("cut","x","y","z")] d_melt <- melt(d_subset, id="cut") data(iris)
一つの図内に複数のデータをしめしたいとき
要は,複数の種類の折れ線グラフ書きたいときとか.
この時,melt関数を使って,データフレームの変形をしないといけない. id=で変形後のキーにしたい列名をしていする.
iris.m <- melt(iris, id="Species")
さて,これでグラフを描く準備ができた.
記法はggplot(data=データフレーム名, aes(x=xになる列, y=yになる列, group=符号化して,グループ分けしたい列))
でグラフオブジェクトの準備をする.ここで注意は,x=,y=で列名を指定するときに,タブルクオートは必要ないこと
ま,変なグラフになるけど,練習だからご愛嬌ってことで.
#折れ線グラフで表示してみる #当然,折れ線グラフ向きのデータでないので変になる p <- ggplot(data=iris.m, aes(x=variable, y=value, group=Species)) p + geom_line(aes(colour=Species)) #実は,.変動幅がある変数なので,箱ひげ図を使うのが正解 ggplot(iris.m, aes(x = variable, y = value)) + geom_boxplot(aes(fill = Species))
melt関数を使わずに1つの図内に複数のデータを描いてみる
#複数元からのデータを使ってmelt()関数を使わなくてもいい方法 p1 <- ggplot(data=d_diamonds, aes(x=x)) #まずは単一のデータからヒストグラムを描いてみる p1 + geom_histogram(binwidth=0.1, alpha=0.5) #次に,別のデータからヒストグラムを重ねあわせる #記法:+ geom_histogram(aes(x=別のデータ列名)) p1 + geom_histogram(binwidth=0.1, alpha=0.5) + geom_histogram(aes(x=y), binwidth=0.1, alpha=0.5) + xlim(0,10)
別々のデータフレームからもってきた複数のデータを1つの図内にしめしたい時
#それぞれ別のデータフレームからデータを引っ張ってきて,1つのグラフに重ねあわせ描写する #まったく意味はないが,車のデータとirisのデータで重ね合わせをしてみる d_cars <- mtcars p2 <- ggplot(data=d_cars, aes(x=gear)) p2 + geom_histogram(binwidth=0.1,alpha=0.5) p2 + geom_histogram(binwidth=0.1,alpha=0.5) + geom_histogram(data=iris, aes(x=Sepal.Width), binwidth=0.1,alpha=0.5)