ggplot2の xlim, ylim と coord_cartesian の違いはこちらになります。
用途 | 範囲外のデータ | 描画範囲(full range of the plot) | |
xlim, ylim | 軸の範囲を指定 | NAにする | 軸の範囲 |
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とは異なる回帰直線になってしまいます(中段のグラフ)。

ちなみに、複数のグラフをひとまとめにするpatchworkのインストール手順はこちらになります。
install.packages("devtools") devtools::install_github("thomasp85/patchwork")
描画範囲(full range of the plot)
ここでの「描画範囲」は、stat_smooth関数(ggplot2)のヘルプに記載されている”full range of the plot“を指すものとします。
fullrange
出典:stat_smooth関数のヘルプ
Should the fit span the full range of the plot, or just the data?
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を追加することで解決しました)。
今回の記事が参考になれば幸いです。
では。
—
YouTube: ミサキさん
問い合わせ先
Mail: caprico.aries@gmail.com
Twitter: https://twitter.com/caprico_aries(無言フォローもお気軽に)
コメント
[…] xlim, ylim と coord_cartesian の違いについてはこちらが良記事です。 […]