Rのggplot2の xlim, ylim と coord_cartesian の違い
ggplot2の xlim, ylim と coord_cartesian の違いはこちらになります。
範囲外のデータに対する処理
xlim, ylimは範囲外の値をNA(欠損)にします。
一方、coord_cartesianは範囲外の値に対し何の処理もしません(ズームインするだけ)。
library(ggplot2)
library(patchwork)
p <- ggplot(mtcars, aes(disp, wt)) +
geom_point() +
stat_smooth(method = "lm", col = "red", se = FALSE, formula = y~x-1) +
scale_x_continuous(limits = c(0, 500)) +
scale_y_continuous(limits = c(0, 6)) +
labs(title = "original")
p1 <- p + xlim(c(0, 250)) + labs(title = "xlim(c(0, 250))")
p2 <- p + coord_cartesian(xlim = c(0, 250)) + labs(title = "coord_cartesian(xlim = c(0, 250))")
p / (p1 | plot_spacer()) / (p2 | plot_spacer())
xlim, ylimでは、範囲外の値は存在しないことになります。
そのため、originalとは異なる回帰直線になってしまいます(中段のグラフ)。
描画範囲(full range of the plot)
ここでの「描画範囲」は、stat_smooth関数(ggplot2)のヘルプに記載されている”full range of the plot“を指すものとします。
stat_smooth関数のヘルプは
?stat_smooth
で確認できます。
xlim, ylimの描画範囲は、指定された軸の範囲になります。
一方、coord_cartesianでは、データが存在する範囲になります。
p <- ggplot(mtcars, aes(disp, wt)) +
geom_point() +
stat_smooth(method = "lm", col = "red", se = FALSE, formula = y~x-1, fullrange = TRUE)
p3 <- p + xlim(c(0, 600)) + ylim(c(0, 8)) + labs(title = "xlim(c(0, 600)) + ylim(c(0, 8))")
p4 <- p + coord_cartesian(xlim = c(0, 600), ylim = c(0, 8)) + labs(title = "coord_cartesian(xlim = c(0, 600), ylim = c(0, 8))")
p3 / p4
stat_smooth関数のfullrange引数の値がTRUE なので、回帰直線の範囲は描画範囲全てになります。
ズームアウトしているとき、回帰直線をグラフ全体に描こうとすると、xlim, ylimを用いる必要があります(上段のグラフ)。
おわりに
今回の記事を書くきっかけは、stat_smoothでfull_range=TRUEが効かない問題に遭遇したからです(xlimを追加することで解決しました)。
今回の記事が参考になれば幸いです。