はじめに
スケール(scale)は、データを視覚的に認識可能な要素に変換するための具体的な詳細を制御します。色、サイズ、位置、形状、透明度などがこれに該当します。
各スケールには対応する関数があり、データ空間の値(関数の定義域)をグラフィック属性空間(関数の値域)にマッピングします。
これらの関数を使用することで、データとグラフィック属性を接続できます。
グラフ内の各属性にはデフォルトのスケール関数があります。前節の例では、これらのスケール関数を明示的に使用していません。デフォルトでは、ggplot2 が自動的にスケールを追加するため、手動で設定する必要がないからです。
スケールの詳細
スケール関数は主に4つのカテゴリーに分類されます:
- 位置スケール:座標軸の制御に使用
- 色スケール:データ変数を色にマッピング
- カスタムスケール(manual):データからグラフィック属性へのマッピング関係を手動でカスタマイズ
- 非マッピングスケール(identity):変数値をそのままグラフィック属性値として使用し、マッピングを行いません。例えば、一部の変数値自体が色値(例:
red、blueなど)を表している場合、変換の必要がありません。
各種スケール関数は以下の通りです。
これらの関数には、いくつかの共通パラメータがあります:
name:座標軸と凡例のラベルを設定します。文字列(\nによる改行をサポート)または数学式を使用できますが、通常はlabs()、xlab()、またはylab()を使用して設定しますlimits:定義域の範囲を制限し、その範囲外のデータは削除されますbreaks:座標軸または凡例に表示される値を制御します。連続データの場合、データをビン分割しますlabels:ブレークポイントのラベルを設定します。labelsを設定するには、breaksを同時に設定する必要があります
例:
p1 <- ggplot(mtcars) +
geom_bar(aes(mpg)) +
scale_x_binned(name = expression(1+exp(2)))
p2 <- ggplot(mtcars) +
geom_bar(aes(mpg)) +
scale_x_binned() +
labs(title = "これは例です", tag = "A", x = expression(1+exp(2)))
p3 <- ggplot(mtcars) +
geom_bar(aes(mpg)) +
scale_x_binned(name = expression(1+exp(2)), limits = c(10, 20))
p4 <- ggplot(mtcars) +
geom_bar(aes(mpg)) +
scale_x_binned(name = expression(1+exp(2)), limits = c(10, 20),
breaks = seq(10, 20, 2), labels = c("A", "B", "C", "D", "E", "F"))
plot_grid(p1, p2, p3, p4, nrow = 2, ncol = 2)
上記の例では、cowplot パッケージの plot_grid 関数を使用して、複数のグラフを1つに描画しています。
スケール関数
1. グラフ情報の設定
labs() 関数を使用して、グラフの情報(タイトル(title)、サブタイトル(subtitle)など)を設定できます。caption を使用してデータソース情報を提供したり、tag を使用して複数のグラフを区別したりすることもできます。
labs(
...,
title = waiver(),
subtitle = waiver(),
caption = waiver(),
tag = waiver()
)
xlab(label)
ylab(label)
ggtitle(label, subtitle = waiver())
例
p <- ggplot(mtcars, aes(mpg, wt, colour = cyl)) + geom_point()
p2 <- p + labs(colour = "気筒数")
p3 <- p + labs(x = "新しいX軸ラベル")
p4 <- p + labs(title = "新しいグラフタイトル")
p5 <- p + labs(title = "新しいグラフタイトル", subtitle = "サブタイトル")
p6 <- p + labs(caption = "(...のデータに基づく)")
p7 <- p + labs(title = "タイトル", tag = "A")
p8 <- p + labs(title = "タイトル") + labs(title = NULL)
plot_grid(p, p2, p3, p4, p5, p6, p7, p8, nrow = 4, ncol = 2,
labels = c("A", "B", "C", "D", "E", "F", "G", "H"))
上記の例では、7番目のグラフの tag が plot_grid で設定した G と重なっています。
xlab()、ylab()、ggtitle() は labs() の特殊なケースで、X軸、Y軸のラベルとタイトルを専用に設定するために使用されます。
2. 範囲の設定
以下の3つの関数を使用してデータの範囲を設定できます。これらの関数は limits パラメータのショートカットです。
lims(...)
xlim(...)
ylim(...)
デフォルトでは、範囲外のデータは NA 値に設定され、つまり範囲外のデータは削除されます。
例
xlim() と ylim() 関数は2つの数値を受け取り、最小値(左側)または最大値(右側)を指定します。
大きな値が前にある場合、軸のデータが反転します。また、値を NA に設定して ggplot2 が数値範囲を推論させることもできます。
p1 <- ggplot(mtcars, aes(mpg, wt)) +
geom_point()
p2 <- ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
xlim(15, 20)
p3 <- ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
xlim(20, 15)
p4 <- ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
xlim(NA, 20)
plot_grid(p1, p2, p3, p4,
labels = c('A', 'B', 'C', 'D')
)
lims() 関数は name-value ペアを受け取ります。name はグラフィック属性でなければならず、値は長さ2の数値、文字列、因子、または日付時刻である必要があります。
異なるグラフで同じカラースキームを設定するために lims を使用できます。
small <- subset(mtcars, cyl == 4)
big <- subset(mtcars, cyl > 4)
p1 <- ggplot(small, aes(mpg, wt, colour = factor(cyl))) +
geom_point() +
lims(colour = c("4", "6", "8"))
p2 <- ggplot(big, aes(mpg, wt, colour = factor(cyl))) +
geom_point() +
lims(colour = c("4", "6", "8"))
plot_grid(p1, p2)
次の例について:
last_month <- Sys.Date() - 0:59
df <- data.frame(
date = last_month,
price = c(rnorm(30, mean = 15), runif(30) + 0.2 * (1:30))
)
p <- ggplot(df, aes(date, price)) +
geom_line() +
stat_smooth()
軸の範囲を設定するには2つの方法があります:
p + lims(x= c(Sys.Date() - 30, NA), y = c(10, 20))
p + coord_cartesian(xlim =c(Sys.Date() - 30, NA), ylim = c(10, 20))
3. 値の範囲の設定
座標軸の範囲を設定するだけでなく、グラフに特定の値を含めることもできます。
expand_limits() 関数を使用します。この関数は名前付きリストを受け取り、名前はグラフィック属性でなければなりません。
例
次の散布図について:
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
> mtcars %>% distinct(mpg) %>% summarise(min=min(.), max=max(.))
min max
1 10.4 33.9
> mtcars %>% distinct(wt) %>% summarise(min=min(.), max=max(.))
min max
1 1.513 5.424
上記の結果から、X軸(mpg)とY軸(wt)のデータ範囲を計算できます。
次に、expand_limits を使用してデータ範囲を調整します。
p1 <- p + expand_limits(x = 0)
p2 <- p + expand_limits(y = c(1, 9))
p3 <- p + expand_limits(x = 0, y = 0)
plot_grid(p1, p2, p3, labels = c('A', 'B', 'C'), nrow = 1)
図Aでは、X軸のデータに 0 を含めるように設定しています。対応する値はありませんが、X座標軸は 0 から始まります。
同様に、図BではY軸に 1 と 9 を含めるように設定しており、データの範囲を超えており、Y軸の範囲を拡大しています。
色の設定もできます。
p1 <- ggplot(mtcars, aes(mpg, wt)) +
geom_point(aes(colour = cyl)) +
expand_limits(colour = seq(2, 10, by = 2))
p2 <- ggplot(mtcars, aes(mpg, wt)) +
geom_point(aes(colour = factor(cyl))) +
expand_limits(colour = factor(seq(2, 10, by = 2)))
plot_grid(p1, p2, labels = c('A', 'B'))
図Aはグラデーション色を設定し、図Bは離散カラースキームです。
> mtcars %>% distinct(cyl)
cyl
Mazda RX4 6
Datsun 710 4
Hornet Sportabout 8
色の値は実際には4、6、8の3つしかないことがわかりますが、5つの異なる色のレベルを設定しています。
図Bから、対応するデータがないため、2と10の色が表示されていないことがわかります。
4. 間隔の設定
expansion() 関数を使用して、データと軸の間の間隔を設定できます。この関数は主に scale_(x|y)_continuous と scale_(x|y)_discrete と組み合わせて使用されます。
# 推奨される使用方法
expansion(mult = 0, add = 0)
# 非推奨
expand_scale(mult = 0, add = 0)
この関数には2つのパラメータがあります:
mult:パーセント間隔、ベクトルを受け取ります。ベクトルの長さが1の場合、上下の間隔は同じになります。長さが2の場合