いずにゃんの研究日記

専門性を広げるための練習場

はじめてのggplot2(1):基本構造と散布図

タイトルはggplot2であるが,RStudioを起動したら迷わず,関連パッケージを一気に読み込んでくれるtidyverseパッケージをロードすればよい。

library(tidyverse)

いつものように「ラブライブ!サンシャイン!!」のスクールアイドルグループAqoursのメンバーのデータを使用する。

dat <-
  data_frame(
    name=c("高海千歌","桜内梨子","松浦果南","黒澤ダイヤ","渡辺曜","津島善子","国木田花丸","小原鞠莉","黒澤ルビィ"),
    grade=c(2,2,3,3,2,1,1,3,1), #学年
    height=c(157,160,162,162,157,156,152,163,154), #身長
    B=c(82,80,83,80,82,79,83,87,76), #バスト
    W=c(59,58,58,57,57,58,57,60,56), #ウエスト
    H=c(83,82,84,80,81,80,83,84,79)  #ヒップ
  )
dat

念のため,学年は因子型に変換しておく

dat$grade <- factor(dat$grade)


基本の構造

ggplot(data = dat) +
  geom_point(mapping = aes(x = height, y = B))

f:id:izunyan:20170129191703j:plain

大体身長とバストサイズが関連しているが,1名例外がいることが分かる。

まずggplot()で使うデータセットを指定し,geom_point()で点の散布図を描くという指定をしている。それぞれ情報を追加していく際に+でつなげるのが特徴である。geom_pointのpointの部分が変わると別の種類のグラフになる。aesとは,aesthetics(訳語は美学,美的感覚)のことで,視覚的な特性を定義する部分である。ここでは横軸をheight,縦軸をBと指定している。

上記コードの形が基本形だが,実際には色々省略可能であり,下記のように単純にできる。

ggplot(dat) +
  geom_point(aes(height, B))

や

ggplot(dat, aes(height, B)) +
  geom_point()

でも同じグラフが描ける。下のコードの方は,ggplot()の中にaesが入っている。


いろいろな散布図

散布図を学年で色分け

ggplot(data = dat) +
  geom_point(mapping = aes(x = height, y = B, color = grade))

f:id:izunyan:20170129191759j:plain

先ほどの点のプロットに,学年別に色を付けた。aes()の中の引数にcolor = gradeが追加されただけの操作である。それぞれのデータが学年とも関連している様子が読み取れる。


散布図を学年で記号分け

ggplot(data = dat) +
  geom_point(mapping = aes(x = height, y = B, shape = grade))

f:id:izunyan:20170129191812j:plain

色ではなくて記号で区別することもできる。こんどは,color =の所がshape =に変わっただけである。


テキストで散布図

ggplot(data = dat) +
  geom_text(mapping = aes(x = height, y = B, label = name))

f:id:izunyan:20170129191739j:plain

それぞれの点が誰のデータか把握するために,点を名前のデータで表示してみた。ここではいくつか変更点があり,geom_text()に変わっている点と,aes()の中の引数にlabel = nameが加わっている。

身長は最も低いのにバストサイズが中程度という,意図的な設定を感じざるを得ないキャラが,花丸ちゃんだということも判明する。あと,千歌ちゃんと曜ちゃんの身長とバストサイズが同じなので,文字が重なってしまっている。