備忘録的な

プログラミングや機械学習に関する備忘録

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に渡す前にデータフレーム型に変換が必要となります.