ggplot2覚書⑤ 体裁(theme、テキストgeom)に関しての大枠
引き続き「Rグラフィッククックブック」。

Rグラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集
- 作者:Winston Chang
- 発売日: 2013/11/30
- メディア: 大型本
過去記事は以下。
ggplot2覚書③ 注釈(解釈補助) - まずは蝋の翼から。
テキストの体裁
ggplot2のテキストは、テーマ要素とテキストgeomの2種類がある。
テーマ要素はタイトル、 凡例、軸など、図内にあるデータ以外のすべて。
テキストgeomはプロット自身の一部。
指定するパラメータは以下のようになっている。
theme要素
タイトル、軸ラベル、軸目盛など、テーマ要素の体裁を指定するには、theme()を使いelement_ text()で要素を設定する。 例えば、axis.title.xはx軸ラベル、plot.titleはタイトルテキストの体裁の指定。
テーマ要素 | テキストgeom | 説明 |
---|---|---|
family | family | フォント(Helvetica, Times, HiraKakuPro-W3) |
face | fontface | 文字効果(plain, bold, italic, bold.italic) |
colour | colour | 色(色名、色コード) |
size | size | フォントサイズ(themeではポイント数、テキストgeomではmm単位) |
hjust | hjust | 水平方向位置(0:左、0.5:中央、1:右) |
vjust | vjust | 垂直方向位置(0:下、0.5:中央、1:上) |
angle | angle | 角度 |
lineheight | lineheight | 行間隔倍率 |
themeでテキスト体裁設定できる要素は以下。
要素名 | 説明 |
---|---|
axis.title | 両軸ラベルの体裁 |
axis.title.x | x軸ラベルの体裁 |
axis.title.y | y軸ラベルの体裁 |
axis.ticks | 両軸目盛ラベルの体裁 |
axis.ticks.x | x軸目盛ラベルの体裁 |
axis.ticks.y | y軸目盛ラベルの体裁 |
legend.title | 凡例項目の体裁 |
plot.title | タイトルの体裁 |
strip.text | 両方向ファセットラベルの体裁 |
strip.text.x | 水平方向ファセットラベルの体裁 |
strip.text.y | 垂直方向ファセットラベルの体裁 |
library(dplyr) library(gcookbook) library(patchwork) # 基本プロット p <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) + geom_point() # テーマ要素の体裁を指定する # rel(1.5)はテーマにおける基本フォントサイズの1.5倍 g1 <- p + theme(axis.title.x=element_text(size=16, lineheight=.9, family="Times", face="bold.italic", colour="red")) # テーマ要素ではフォントサイズはポイント単位 g2 <- p + ggtitle("Age and Height\nof Schoolchildren") + theme(plot.title=element_text(size=rel(1.5), lineheight=.9, family="Times", face="bold.italic", colour="red")) g1 | g2
また、テキストgeom(geom_text()やannotate()によって作られる、プロット中にあるテキスト)の体裁を設定するには、geom内で直接設定を打ち込む。
library(dplyr) library(gcookbook) library(patchwork) # 基本プロット p <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) + geom_point() # テキストgeomではフォントサイズはmm単位 p + annotate("text", x=15, y=53, label="Some text", size = 7, family="Times", fontface="bold.italic", colour="red") p + geom_text(aes(label=weightLb), size=4, family="Times", colour="red")
各項目の設定
詳細を設定したいelementに対して、element functionをtheme()に指定する。
library(gcookbook) # データセットの読み込み library(patchwork) # 基本プロット p <- ggplot(heightweight, aes(x=ageYear, y=heightIn, colour=sex)) + geom_point() # プロット領域の設定 g1 <- p + theme( panel.grid.major = element_line(colour="red"), panel.grid.minor = element_line(colour="red", linetype="dashed", size=0.2), panel.background = element_rect(fill="lightblue"), panel.border = element_rect(colour="blue", fill=NA, size=2)) # テキスト項目の設定 g2 <- p + ggtitle("Plot title here") + theme( axis.title.x = element_text(colour="red", size=14), axis.text.x = element_text(colour="blue"), axis.title.y = element_text(colour="red", size=14, angle = 90), axis.text.y = element_text(colour="blue"), plot.title = element_text(colour="red", size=20, face="bold"))
elementをまとめると以下のようになる。
- axis:軸
- legend:凡例
- panel:グリッド線やパネルの背景
- stripe:facetで分割したラベル部
elementに指定できるものは以下となる
- element_text:テキスト要素
- element_rect:背景や境界(ざっくり書くと、長方形のものの領域)
- element_line:線要素
- element_brank:全てに適応可能で、非表示にできる
名前 | 説明 | 要素の型 |
---|---|---|
text | すべてのテキスト要素 | element_text() |
rect | 全ての長方形要素 | element_rect() |
line | すべての線要素 | element_line() |
axis.line | 軸に沿った線 | element_line() |
axis.title | 両軸ラベルの体裁 | element_text() |
axis.title.x | x軸ラベルの体裁 | element_text() |
axis.title.y | y軸ラベルの体裁 | element_text() |
axis.text | 両軸目盛ラベルの体裁 | element_text() |
axis.text.x | x軸目盛ラベルの体裁 | element_text() |
axis.text.y | y軸目盛ラベルの体裁 | element_text() |
legend.background | 凡例の背景 | element_text() |
legend.text | 凡例項目の体裁 | element_text() |
legend.title | 凡例タイトルの体裁 | element_text() |
legend.position | 凡例の位置 | left, right, bottom, top, c(x,y) :x,yは0~1 |
panel.background | プロット領域の背景 | element_rect() |
panel.border | プロット領域の枠線 | element_rect(linetype="xxx") |
panel.grid.major | 主目盛線 | element_line() |
panel.grid.major.x | 主目盛線の垂直方向 | element_line() |
panel.grid.major.y | 主目盛線の水平方向 | element_line() |
panel.grid.minor | 補助目盛線 | element_line() |
panel.grid.minor.x | 補助目盛線の垂直方向 | element_line() |
panel.grid.minor.y | 補助目盛線の水平方向 | element_line() |
plot.background | プロット全体の背景 | element_rect(fill="xxx", color="yyy") |
plot.title | タイトルの体裁 | element_text() |
strip.text | 両方向ファセットラベルテキストの体裁 | element_text() |
strip.text.x | 水平方向ファセットラベルテキストの体裁 | element_text() |
strip.text.y | 垂直方向ファセットラベルテキストの体裁 | element_text() |
# 凡例の設定 g3 <- p + theme( legend.background = element_rect(fill="grey85", colour="red", size=1), legend.title = element_text(colour="blue", face="bold", size=14), legend.text = element_text(colour="red"), legend.key = element_rect(colour="blue", size=0.25)) # ファセットの設定 g4 <- p + facet_grid(sex ~ .) + theme( strip.background = element_rect(fill="pink"), strip.text.y = element_text(size=14, angle=-90, face="bold")) (g1|g2) / (g3|g4)
組み込みテーマ
組み込みのテーマとしてtheme_grey, theme_bwがある。 組み込みテーマに上書きしてtheme設定をおこないたい場合は、組み込みテーマより後ろでthemeを設定する。
library(gcookbook) # データセットの読み込み library(patchwork) # 基本プロット p <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) + geom_point() g1 <- p + theme_grey() # グレイのテーマ (デフォルト) g2<- p + theme_bw() # ブラックとホワイトのテーマ g1 | g2
自作テーマ
テーマを自作することができる。事前に作成しておくと毎回入力する手間が端折れる。個人的にはグラフのタイプhistgram, plot, ...毎に作成しておくと楽。
library(gcookbook) # データセットの読み込み # theme_bw()を基にしていくつか変更する mytheme <- theme_bw() + theme(text = element_text(colour="red"), axis.title = element_text(size = rel(1.25))) # 基本プロット p <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) + geom_point() # 変更したテーマを使ってプロットする p + mytheme