Facet_wrapを使用して散布図を分割します
facet_wrap(x~y+z)
これにより、私の場合、必要に応じて22のプロットが生成されます。ただし、これらの22の各プロットのラベルは3行(x、y、z)で表示され、ウィンドウ内のスペースを不必要に消費し、プロットを小さな領域に押しつぶします。プロットのサイズを大きくしたいです。変数yとzは短いので、2つではなく同じ行に表示したいと思います。
ラベラーのオプションを調べましたが、どれも私が望むことをするようには見えません。ここで提案をいただければ幸いです。
ラベラー関数を使用してこれを行う方法はわかりませんが、別のオプションは、3つのカテゴリ変数すべてをファセットに使用できる単一の変数に結合するグループ化変数を作成することです。組み込みのmtcars
データフレームとdplyr
パッケージを使用して、オンザフライで新しいグループ化変数を作成する例を次に示します。それに続いて、1〜3つのファセット変数を動的に選択できる関数を使用した更新が行われます。
library(dplyr)
ggplot(mtcars %>% mutate(group = paste(cyl,am,vs, sep="-")),
aes(wt,mpg)) +
geom_point() +
facet_wrap(~group)
UPDATE:柔軟性に関するコメントに関して、以下のコードは、ユーザーが目的のデータフレームと変数名を入力できるようにする関数です。 1、2、または3列のファセット。
library(dplyr)
library(lazyeval)
mygg = function(dat, v1, v2, f1, f2=NA, f3=NA) {
dat = dat %>%
mutate_(group =
if (is.na(f2)) {
f1
} else if (is.na(f3)) {
interp(~paste(f1,f2, sep='-'), f1=as.name(f1), f2=as.name(f2))
} else {
interp(~paste(f1,f2,f3,sep='-'), f1=as.name(f1), f2=as.name(f2), f3=as.name(f3))
})
ggplot(dat, aes_string(v1,v2)) +
geom_point() +
facet_wrap(~group)
}
では、関数を試してみましょう。
library(vcd) # For Arthitis data frame
mygg(Arthritis, "ID","Age","Sex","Treatment","Improved")
mygg(mtcars, "wt","mpg","cyl","am")
mygg(iris, "Petal.Width","Petal.Length","Species")