Mukku John Blog

取り組んでいること を つらつら と

ggplot2を使って、軸を制御する-3

R グラフィックス クックブック 24回目

ggplot2パッケージを利用して、軸を制御していきます。
今回は、目盛りラベル/軸ラベルのテキストを制御します。

目盛りラベルのテキスト

こちらのグラフのy軸の目盛りラベルを対象にします。
f:id:MukkuJohn:20161011203535p:plain
y軸の目盛りラベルは、50、55、60、65、70で設定されています。


目盛りを変更するためには、scale_y_continuous()breaks引数を指定します。

#目盛りを、50,56,60,66,72に設定します。
ベースのグラフ + 
  scale_y_continuous(breaks=c(50,56,60,66,72))

f:id:MukkuJohn:20161011210248p:plain

この50,56,60,66,72の目盛りのテキスト(ラベル)を変更するためには、
scale_y_continuous()labels引数を指定します。

ベースのグラフ + 
  scale_y_continuous(breaks=c(50,56,60,66,72),
                     labels=c("Tiny","Really\nshort","Short","Medium","Tallish"))

f:id:MukkuJohn:20161011210508p:plain

このbreaks引数とlabels引数の要素数は、同じである必要があります。
素数が異なる場合は、エラーになります。

Error: Breaks and labels have unequal lengths

labels引数ですが、別途作成したフォーマッタ関数を指定できます。

#インチをフィートとインチの形式に変換します
footinch_formatter <- function(x){
  foot <- floor(x/12)
  inch <- x %% 12
  return(paste(foot,"'",inch,"\"",sep=""))
}

footinch_formatter(56:64)
[1] "4'8\""  "4'9\""  "4'10\"" "4'11\"" "5'0\""  "5'1\""  "5'2\""  "5'3\""  "5'4\"" 

上で作成した関数をlabels引数に指定します。

#ggplotが自動で設定した目盛り値を変換してグラフに設定します
ベースのグラフ + 
  scale_y_continuous(labels=footinch_formatter)

f:id:MukkuJohn:20161011211103p:plain


さらに目盛りのテキスト(ラベル)は、theme()axis.text.y引数に、
element_text()を設定することで、体裁を設定できます。
(x軸の場合は、axis.text.x引数)

設定項目 element_text()の引数
角度 angle
水平位置 hjust(0:左揃え~1:右揃え)
垂直位置 vjust(0:下揃え~1:上揃え)
サイズ size
colour
スタイル face(bold or italic)
フォントファミリー family

まとめて指定する場合は、こんな感じになります。

ベースのグラフ + 
  scale_y_continuous(breaks=c(50,56,60,66,72),
                     labels=c("Tiny","Really\nshort","Short","Medium","Tallish")) +
  theme(axis.text.y = element_text(angle = 30, hjust = 1, 
                                   vjust = 0 , size = rel(1.5), 
                                   colour = "darkred", face = "italic"))

f:id:MukkuJohn:20161011213241p:plain

軸ラベルのテキスト

軸ラベル(x軸やy軸のタイトル)を変更する方法は、3通りあります。

  1. xlab()ylab()を使う
  2. labs()x引数とy引数を指定する
  3. scale_x_continuous()scale_y_continuous()name引数を指定する

下の3つは全て同じ結果が得られます。

ベースのグラフ + 
  xlab("Age in years") + ylab("Height in inches")

ベースのグラフ + 
  labs(x = "Age in years", y = "Height in inches")

ベースのグラフ + 
  scale_x_continuous(name = "Age in years") +
  scale_y_continuous(name = "Height in inches")

f:id:MukkuJohn:20161011213605p:plain

軸ラベルも、目盛りラベルと同様に、テキストの体裁を変更できます。
theme()の引数が微妙に異なります。

軸ラベル 目盛りラベル
axis.title.y axis.text.y

(x軸は、yの部分をxにします)

axis.title.y引数に、element_text()を指定します。

ベースのグラフ + ylab("Height\n(inches)") +
  theme(axis.title.y=
          element_text(angle=0,
                       face="italic",
                       colour="darkred",
                       size=14))

f:id:MukkuJohn:20161011220046p:plain


この記事の全部入りは、こんな感じになります。

#目盛りラベルも軸ラベルも設定します
ベースのグラフ + 
  scale_y_continuous(breaks=c(50,56,60,66,72),
                     labels=c("Tiny","Really\nshort","Short","Medium","Tallish"),
                     name = "Height\n(inches)") +
  theme(axis.text.y = element_text(angle = 30, hjust = 1, 
                                   vjust = 0 , size = rel(1.5), 
                                   colour = "darkred", face = "italic"),
        axis.title.y = element_text(angle = 0, face = "bold",
                                    colour = "grey",size = 15,
                                    vjust = 1), 
        axis.title.x = element_text(hjust = 1,size = rel(2)))

f:id:MukkuJohn:20161011220649p:plain