ggplot2を使ったグラフ描画
仕事で時系列データ分析をする必要があり,状態空間モデルを使ってみようと思ったのですが,PythonよりRの情報が多いため,まずはRの復讐から始めます.
この記事ではggplot2を用いたグラフ描画方法を備忘録として残しておきます.
ggplot2パッケージのインストールと読み込み
> install.packages("ggplot2") > library(ggplot2)
データの準備
> fish <- read.csv("2-2-1-fish.csv") > head(fish, n=3) length 1 8.747092 2 10.367287 3 8.328743
ヒストグラム
ggplot(data=fish, mapping=aes(x=length)) + geom_histogram(alpha=0.5, bins=20) + labs(title="ヒストグラム")
mapping=aes(x=length)で横軸に来る変数を指定しています.
aes関数はaesthetic attributeの意味で,各軸の変数や見た目の属性を指定します.
data=,mapping=は省略可能です.
ここまでがグラフのベース部分になります.
今回はここに,geom_histogramを足し合わせ,最後にlabsを使ってグラフのタイトルを足し合わせています.
カーネル密度推定
ggplot(data=fish, mapping=aes(x=length)) + geom_density(size=1.0) + labs(title="カーネル密度推定")
sizeは線の太さです.
グラフの重ね合わせ
ggplot(data=fish, mapping=aes(x=length, y=..density..)) + geom_histogram(alpha=0.5, bins=20) + geom_density(size=1.0) + labs(title="グラフの重ね合わせ")
y=..density..でヒストグラムの面積が1になるようにしています.そうしないとカーネル密度推定の結果をY軸のレンジが違いすぎて見づらくなります.
グラフを並べる
library(gridExtra) p_hist <- ggplot(data=fish, mapping=aes(x=length)) + geom_histogram(alpha=0.5, bins=20) + labs(title="ヒストグラム") p_density <- ggplot(data=fish, mapping=aes(x=length)) + geom_density(size=1.0) + labs(title="カーネル密度推定") grid.arrange(p_hist, p_density, ncol=2)
gridExtraというライブラリを使います.
箱ひげ図とバイオリンプロット
ggplot(data=iris, mapping=aes(x=Species, y=Petal.Length)) + geom_boxplot() + labs(title="箱ひげ図") ggplot(data=iris, mapping=aes(x=Species, y=Petal.Length)) + geom_violin() + labs(title="バイオリンプロット")
散布図
ggplot(iris, aes(x=Petal.Width, y=Petal.Length, color=Species)) + geom_point()
color=Speciesでアヤメの種類別に色分けしています.
折れ線グラフ
nile_df <- data.frame( year = 1871:1970, Nile = as.numeric(Nile) ) ggplot(nile_df, aes(x=year, y=Nile)) + geom_line()
折れ線グラフのサンプルにRに最初から用意されているNileデータを使いますが,Nileデータは時系列データであり,ggplotに渡す前にデータフレーム型に変換が必要となります.