ggplot2を使って、軸を制御する-3
R グラフィックス クックブック 24回目
ggplot2パッケージを利用して、軸を制御していきます。
今回は、目盛りラベル/軸ラベルのテキストを制御します。
目盛りラベルのテキスト
こちらのグラフのy軸の目盛りラベルを対象にします。
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))
この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"))
この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)
さらに目盛りのテキスト(ラベル)は、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"))
軸ラベルのテキスト
軸ラベル(x軸やy軸のタイトル)を変更する方法は、3通りあります。
- xlab()やylab()を使う
- labs()にx引数とy引数を指定する
- 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")
軸ラベルも、目盛りラベルと同様に、テキストの体裁を変更できます。
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))
この記事の全部入りは、こんな感じになります。
#目盛りラベルも軸ラベルも設定します ベースのグラフ + 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)))