ggplotを使ったグラフの中に、四角の領域を入れる方法を紹介します。とても簡単です。ggplot2を使うためまずはライブラリのtidyverse(またはggplot2)を起動します。
library(tidyverse)
資格の領域を作るにはgeom_rectを使います。その領域をxmin, xmax, ymin, ymaxで指定します。その領域の色はデフォルトで灰色(grey20)になっています。
geom_rectの使い方
まずは書いてみます
四角の領域を書くにはgeom_rectを使います。x軸の最小値(xmin)と最大値(xmax)、y軸の最小値yminと最大値ymaxをしています。すると次のようなグラフが描けます。
ggplot() +
geom_rect(aes(xmin=1, xmax=3, ymin=2, ymax=5))
色を塗る
色をつけていきます。中の色はfillで指定します。今はレジェンドが邪魔なので消しておきます。
ggplot() +
geom_rect(aes(xmin=1, xmax=3, ymin=2, ymax=5, fill='red')) +
theme(legend.position = "none")
枠線の色を塗る
次にその領域の枠の色も指定します。color=’色’で枠線の色が入ります。
ggplot() +
geom_rect(aes(xmin=1, xmax=3, ymin=2, ymax=5, fill='red'), color='blue') +
theme(legend.position = "none")
グラフ外まで領域が広がっている時
例えば、その図の外側までずっと続くような感じのグラフにしたい場合、Infを使うとできます。
ggplot()+
geom_rect(aes(xmin=0, xmax=Inf, ymin=0, ymax=Inf, fill='red'), color='red') +
scale_x_continuous(limits = c(-2, 6)) +
scale_y_continuous(limits = c(-2, 6)) +
theme(legend.position = "none")
マイナス方向でずっと領域が続く時には-Infを使います。複数の領域を書く方法はまたあとで書きますが、-Infを使うと次のようになります。
透明度はalphaで1より小さく、そして小さい値ほど透明になります。
df <- data.frame(x1=c(-Inf, 0), x2=c(0, Inf), y1=c(-Inf, 0), y2=c(0, Inf),
group=c('a', 'b'))
ggplot() +
geom_rect(data=df, aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2, fill=group),
alpha=0.3) +
scale_x_continuous(limits = c(-6, 6)) +
scale_y_continuous(limits = c(-6, 6)) +
theme_minimal()
複数の領域を書きたい時
この時はデータフレームで領域を指定すると楽になります
複数の四角を作りたい時、データフレームにします。下の式ではx1が左辺、x2が右辺のx座標、y1が下辺、y2が上辺のy座標です。データフレームではさらにグループ分けもしています。
df=data.frame(x1=c(1,2, 3,5), x2=c(5, 8, 5,Inf),
y1=c(1, 2, 2, 4), y2=c(2, 3, 6,Inf),
group=c('a', 'a','b','b'))
ggplot() +
geom_rect(data=df, aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2, fill=group),
color='black', alpha=0.3) +
scale_x_continuous(limits =c(0, 10)) +
scale_y_continuous(limits = c(0, 7))
scale_x_continuousとscale_y_continuousでx軸とy軸のどの数値まで入れるか指定しています。
他のグラフの背景にする
使い所としては他のグラフの背景にして目立たせるということでしょう。ggplot2は記述を+で重ねて行くだけなので、とても簡単です。単純な直線のグラフの背景として書いてみます。geom_ablineが追加された斜めの線です。
rect <- data.frame(x1=c(-Inf, 0), x2=c(0, Inf), y1=c(-Inf, 0), y2=c(0, Inf),
group=c('a', 'b'))
ggplot()+
geom_rect(data=rect, aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2, fill=group),
alpha=0.3) +
geom_abline(intercept=0, slope = 1) +
scale_x_continuous(limits = c(-6, 6)) +
scale_y_continuous(limits = c(-6, 6)) +
theme_minimal()
いかがだったでしょうか。わかってしまえば簡単です。ぜひ試してみてください。