いずにゃんの研究日記

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

はじめてのggplot2(2):棒グラフを好みの色で描く

ggplot2の基本の構造等は前回の解説を参照。

izunyan.hatenablog.com

まずはいつものデータの読み込み。tidyverseをロードしておけば,ggplot2も読み込まれる。

library(tidyverse)
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)  #ヒップ
  )


Aqoursのメンバーごとの身長の棒グラフを描く

今回はx軸にメンバーの名前,y軸に身長がくるグラフにするので,geom_col()を使う。

ggplot(data = dat) +
  geom_col(mapping = aes(x = name, y = height))

f:id:izunyan:20170521174608j:plain


メンバーの並び順を変える

デフォルトのままだと,並び順に規則性がない感じなので,とりあえず公式webサイトでの紹介順に並び変えたい。並び方を指定するには,

izunyan.hatenablog.com

で紹介した通り,因子型が簡単なので,変数nameを因子型に変換する。ここでは新たな変数namefを作成してみる。

dat$namef <- factor(dat$name)

そして,指定した順に並び変える。

library(forcats)
dat$namef <- fct_relevel(dat$namef, "高海千歌","桜内梨子","松浦果南","黒澤ダイヤ","渡辺曜","津島善子","国木田花丸","小原鞠莉","黒澤ルビィ")
levels(dat$namef)
[1] "高海千歌"   "桜内梨子"   "松浦果南"   "黒澤ダイヤ" "渡辺曜"     "津島善子"   "国木田花丸" "小原鞠莉"   "黒澤ルビィ"


棒グラフを色で塗りつぶす

aes()の中にfill =を加え,x軸に指定した変数名を入れると着色される。後の追加編集のため,ここではpというオブジェクトに格納している。

p <- ggplot(data = dat) +
  geom_col(mapping = aes(x = namef, y = height, fill=namef))
p

f:id:izunyan:20170521194314j:plain

ただし,色がデフォルトのものであるため,ここは是非メンバーのイメージカラーで塗りつぶしてみたくなるのが自然な流れであろう。


各メンバーの棒グラフの色をそれぞれ指定する

Aqoursメンバーのイメージカラーについて,公式サイトのメンバー紹介ページ

www.lovelive-anime.jp

から,各シンボルマークで使われている色を使用する。この情報を取得する方法は色々あるが,今回はブラウザFirefox上で,スポイト機能を使って取得してみた。やり方は以下のリンク先を参照した。

daredemopc.blog51.fc2.com

結果,メンバーの紹介順に,左から

imagecol <- c("#FF791B","#FF7777","#00D29E","#F43232","#2AA4DB","#AEAEAE","#CFBA0F","#A530E0","#EE55B7")

という情報であることが分かった。ここでは後で使うため,imagecolというオブジェクトに格納した。

そして,グラフの色を手動で指定するために,scale_fill_manual()を使う。さきほど描いたグラフpに情報を追加するだけである。

p + scale_fill_manual(values = imagecol)

f:id:izunyan:20170521174610j:plain

これで直感的にグラフを解釈しやすくなった!