関数名 | 関数の意味 |
---|---|
points(x, y) | x, yで指定した場所に点を追加 |
text(x, y, label) | x, yで指定した場所にlabelで指定したテキストを追加 |
abline(a, b) | 傾きb,切片aの線を追加 |
abline(h) | hで指定したy軸の位置に横線を追加 |
abline(v) | vで指定したx軸の位置に縦線を追加 |
polygon(x, y) | x, yで指定した点をつなぐ形を追加 |
rect(xleft, ybottom, xright, ytop) | 指定したサイズの長方形を追加 |
symbols(x, y, circles) | x, yで指定した位置に図形(円など)を追加 |
arrows(x0, y0, x1, y1) | x0, y0の位置からx1, y1の位置までの矢印を追加 |
legend(x, y, legend) | 凡例を追加 |
title(main, sub) | グラフのタイトルを追加 |
axis(side) | sideで指定した位置に軸を追加 |
grid() | グリッド線を追加 |
21 グラフ作成:低レベルグラフィック関数とグラフィックパラメータ
前章で説明した高レベルグラフィック関数は、少数の引数を与えれば軸や点の位置、グラフの種類等をほぼ自動的に設定してくれる関数です。
一方で、低レベルグラフィック関数は、グラフ上に点や線、文字などを逐次追加していくための関数です。Rでは基本的には高レベルグラフィック関数を用いて大まかなグラフを作成し、追加で説明などを加えたいときには低レベルグラフィック関数を用います。低レベルグラフィック関数の一覧を以下の表1に示します。
21.1 points関数
points
関数は、すでに存在するグラフに点を追加するための関数です。points
関数はx
とy
の2つの引数を取り、そのx
、y
が示す場所に点を追加します。
21.2 text関数
text
関数は、グラフに文字を追加するための関数です。text
関数はx
、y
とlabel
の3つの引数を取り、そのx
、y
が示す場所にlabels
で指定した文字列を追加します。
21.3 abline関数
abline
関数はグラフに直線を追加するための関数です。abline
関数の引数の指定方法には以下の4種類があります。
- 切片(引数
a
)と傾き(引数b
)を指定する - 横線のy軸の位置(引数
h
)を指定する - 縦線のx軸の位置(引数
v
)を指定する - 線形回帰の結果(引数
coef
)を指定する
21.4 多角形・図形・矢印を追加
グラフ上に多角形や長方形、図形、矢印を追加する場合には、それぞれpolygon
関数、rect
関数、symbols
関数、arrows
関数を用います。
polygon
関数は、引数x
とy
に数値のベクターを取り、そのベクターで指定したx
、y
の点を繋げた多角形を追加する関数です。始点と終点が一致していれば閉じた多角形を、一致していなければ閉じていない多角形を描画します。
rect
関数は長方形を追加するための関数です。rect
関数では、引数xleft
、xright
で長方形の左端、右端、引数ybottom
、ytop
で長方形の下端、上端を指定します。
symbols
関数は引数x
、y
に指定した位置に図形を追加するための関数です。symbols
関数で指定できる図形は、円(circles
)、正方形(squares
)、長方形(rectangles
)、星(stars
)、温度計(thirmometers
)、箱ひげ図(boxplot
)です。図形名を引数に取り、数値で図形の詳細を指定することでそれぞれの図形を描画できます。
arrows
関数は矢印を追加するための関数です。arrows
関数の始めの2つの引数(x0
とy0
)には矢印の始点の座標を、3つ目と4つ目の引数(x1
とy1
)には矢印の終点の座標をそれぞれ指定します。
様々な図形の描画
par(mai = c(0.1, 0.1, 0.1, 0.1))
plot(x = 0, y = 0, type = "n", xlab = "", ylab = "", axes = FALSE)
polygon( # 多角形(星形)を追加
x = c(0, 0.2245, 0.9511, 0.3633, 0.5878, 0, -0.5878, -0.3633, -0.9511, -0.2245, 0, 0.2245) * 0.25 - 0.5,
y = c(1, 0.309, 0.309, -0.118, -0.809, -0.382, -0.809, -0.118, 0.309, 0.309, 1, 0.309)* 0.25 + 0.5,
col = "#48C9B0"
)# 長方形を追加
rect(xleft = 0, xright = 0.5, ybottom = 0.25, ytop = 0.75, col = "#E74C3C")
# 円を追加
symbols(x = -0.5, y = -0.5, circles = 0.1, add = TRUE, inches = 0.3, col = "#5DADE2")
# 矢印を追加
arrows(x0 = 0.25, y0 = -0.75, x1 = 0.5, y1 = -0.5, col = "#A569BD")
21.5 凡例とタイトルの追加
legend
関数は凡例(legend)を追加するための関数です。legend
関数はx
、y
、legend
の3つの引数を取り、x
とy
には凡例の位置を、legend
には凡例の説明を示す文字列をそれぞれ引数に取ります。
title
関数はグラフのタイトルを追加するための関数です。title
関数では、main
とsub
の2つの引数にそれぞれメインタイトル、サブタイトルを文字列で指定することで、それぞれのタイトルをグラフに追加することができます。
21.6 軸とグリッドの操作
axis
関数はグラフの縦・横軸を追加するための関数です。axis
関数の引数は数値の1~4で、1からそれぞれ下・左・上・右の軸の追加を意味します。
グリッド線の追加に用いるのがgrid
関数です。grid
関数を引数無しで指定すれば、すでに記述されている軸ラベルに従いグリッド線を追加してくれます。引数でグリッドの間隔を指定することもできます。
21.7 グラフィックパラメータ
Rのグラフ作成では、グラフィックパラメータと呼ばれる引数を指定し、点や線、色や軸ラベル等を調整することができます。
グラフィックパラメータはpar
関数の引数として用います。plot
関数などの高レベルグラフィック関数では、引数として一部のグラフィックパラメータを使用することもできます。Rのグラフィックパラメータは60以上あり、うまく利用すれば見やすく、理解しやすいグラフを作成することもできます。グラフィックパラメータの一覧を以下の表2に示します。
21.8 重ね書き:new=T
前章で説明した通り、Rではすでに記述しているグラフに、別のグラフを重ね書きすることができます。この重ね書きに用いるのが、new=T
というグラフィックパラメータです。par(new=T)
を宣言すると、宣言前に作図したグラフを消去することなく、同じデバイス上に次のグラフが追加されます。
21.9 複数のグラフを1つのデバイスに表示
複数のグラフを1つのデバイス上に描画する場合には、グラフィックパラメータのmfrow
引数又はmfcol
引数を用います。いずれも引数に2つの数値からなるベクターを取ります。ベクターの1つ目の要素が行方向にデバイスを分割する数、2つ目の要素が列方向にデバイスを分割する数になります。このとき、mfrow
とmfcol
のいずれを用いても、結果は同じになります。
グラフィックパラメータとしてpar
関数内で引数mfrow
又はmfcol
を宣言した後、plot
関数などの高レベルグラフィック関数を用いてグラフを描画します。plot
関数では、引数mfg
を用いて、グラフを表示する位置を指定します。位置は引数mfrow
で指定した行、列の中で設定します。例えば、mfg=c(2, 3)
と指定すると、そのグラフはグラフィックデバイスのうち、2行3列目に描画されます。
複数のプロットを表示1
# mfcolでもmfrowでも同じ。3行2列にデバイスを分割
par(mfrow = c(3, 2))
plot(1, mfg = c(1, 1)) # 1行1列目のグラフ
plot(1:10, 1:10, type = "l", mfg = c(1, 2)) # 1行2列目のグラフ
plot(iris$Sepal.Length, iris$Sepal.Width, mfg = c(2, 1)) # 2行1列目のグラフ
plot(Nile, mfg = c(2, 2))
hist(iris$Sepal.Length, mfg = c(3, 1))
boxplot(iris$Petal.Width~iris$Species, mfg = c(3, 2))
同様のデバイスの分割には、layout
関数を用いることもできます。layout
関数は行列を引数に取ります。行列の要素は数値で、数値の順にグラフが埋められていきます。
複数のプロットを表示2
layout(matrix(c(2, 4, 1, 3), nrow=2)) # 2行2列に分割
plot(1) # 行列の数値の順番にグラフが描画される
plot(iris$Sepal.Length, iris$Sepal.Width)
hist(iris$Sepal.Length)
boxplot(iris$Sepal.Width~iris$Species)
グラフの分割には、split.screen
関数を用いることもできます。split.screen
関数は引数に数値2つのベクターを取ります。1要素目の数値が行数、2要素目の数値が列数を示します。split.screen
関数では、screen
関数によって描画するグラフの位置を指定します。例えば、screen(n=2)
を指定すると、分割したデバイスの2番目の位置に次のグラフが描画されることになります。
split.screen関数でプロットエリアを分割
split.screen(c(1, 3)) # 1行3列にデバイスを分割
[1] 1 2 3
plot(1) # 1つ目(一番左)に描画
screen(n = 2) # 2つ目に描画することを指定
plot(iris$Sepal.Length, iris$Sepal.Width)
screen(n = 3)
hist(iris$Sepal.Length)
21.10 マージンの設定
マージン(余白)には、個々のグラフに対するマージンと、デバイスに対するマージンの2つがあります。デバイスにグラフを1つだけ表示する場合には、この2つのマージンは同じ意味を持ちます。
一方で、上で説明した通り、Rではデバイスを分割して複数のグラフを表示することができます。デバイスを分割する場合には、デバイス全体のマージンとは別に、表示する個々のグラフに対するマージンを設定することができます。
個々のグラフに対するマージンを設定するグラフィックパラメータはmai
、mar
です。mar
とmai
の違いは、mai
がマージンをインチ単位で設定するのに対し、mar
は文字の行で設定する点です。いずれも要素が4つの数値ベクターでマージンを設定します。数値ベクターの要素はそれぞれ下、左、上、右のマージンを表したものとなります。
デバイス全体のマージンを設定するグラフィックパラメータがomi
、oma
です。omi
とoma
の違いはmai
、mar
と同じで、omi
がインチ単位、oma
が行単位でマージンを設定する引数です。要素が4つの数値ベクターで設定すること、要素がそれぞれ下、左、上、右のマージンを表すのも、mai
、mar
と同じです。
21.11 グラフの色の調整
グラフの色も、グラフィックパラメータを用いることで調整することができます。グラフの色に関わるグラフィックパラメータは、bg
、col
、col.axis
、col.lab
、col.main
、col.sub
、fg
です。それぞれ、背景色、点の色、軸の色、軸ラベルの色、メインタイトルの色、サブタイトルの色、枠の色を示します。色の設定を用いると、下のようにグラフの要素の色を変えたグラフを作成することもできます。
グラフの色の調整
par(bg = "lightgray") # 背景色はpar関数で呼び出し
plot(
1:10,
cex=3,
col = "red", # 点の色は赤
col.axis = "blue", # 軸の数値は青
col.lab = "purple", # 軸のラベルは紫
col.main = "pink", # メインタイトルはピンク
col.sub = "orange", # サブタイトルはオレンジ
fg = "violet", # 枠の色はバイオレット
main = "メインタイトル",
sub = "サブタイトル"
)
Rで用いることのできる色については、NCEAS (National Center for Ecological Analysis and Synthesis)が公開しているチートシートに詳しくまとめられています。
色はベクターで指定することもできます。
21.12 インタラクティブグラフィック関数
グラフを描画した後、グラフをクリックすることでその点の値を得る場合には、locator
関数を用います。locator
関数は引数に数値を取り、その数値の回数だけグラフをクリックし、クリックした位置の値を得ることができます。得た値はxとyのリストで返ってきます。
locator関数でクリックした位置の値を取得する
plot(1:10)
locator(1) # 1つの点を選ぶ(xとyの値がリストで返ってくる)
同様に描画したグラフにテキストなどでラベルを表示するための関数が、identify
関数です。identify
関数は、x
、y
、labels
の3つの引数を取ります。x
、y
にはラベルを表示したい位置、labels
にはそれぞれの点に表示するラベルを文字列で記載します。identify
関数はRStudioでは正常に機能せず、RGUIでのみ機能します。
identify関数で値を取得する
<- 1:7
x <- 1:7
y plot(x, y)
# 点をクリックすると1~7のラベルが付く(RGUI)
identify(x, y, labels = 1:7)