2016-05-10 6 views
10

1行に多変数facet_wrapラベルを置きます。しかし、これらの22個のプロットのラベルは、3つの行(x、y、z)で表示され、不必要にウィンドウ内のスペースを消費し、プロットを小さな領域に押しやります。私はむしろ私のプロットがより大きなものになりたいと思っています。変数yとzは短いので、2つではなく同じ行に表示したいと思います。ggplot2:私は、必要に応じてこれが私の場合には22のプロットを生成</p> <pre><code>facet_wrap(x~y+z) </code></pre> <p>としての私の散布図を分割するfacet_wrapを使用しています

私はlabellerのオプションを調べましたが、私が望むことはしていないようです。私はここに提案を感謝します。

答えて

9

この場合、あなたはまた、label_wrap_gen()検討するかもしれない:詳細については

p <- ggplot(mtcars, aes(wt,mpg)) + geom_point() 
p + facet_wrap(cyl~am+vs, labeller = label_wrap_gen(multi_line=FALSE)) 

herehere参照。

6

labeller関数でこれを行う方法がわかりませんが、別のオプションは、3つのカテゴリ変数をすべてファセットに使用できる単一の変数にまとめるグループ化変数を作成することです。新しいグループ化変数をオンザフライで作成するために、組み込みのmtcarsデータフレームとdplyrパッケージを使用する例があります。それに続くのは、1つから3つのファセット変数の動的選択を可能にする関数による更新です。

library(dplyr) 

ggplot(mtcars %>% mutate(group = paste(cyl,am,vs, sep="-")), 
     aes(wt,mpg)) + 
    geom_point() + 
    facet_wrap(~group) 

enter image description here

UPDATE:柔軟性に関するコメントについて、以下のコードは、ユーザが所望のデータフレームと動的一方の面に選択を含む変数名を入力することを可能にする機能であります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") 

enter image description here

+0

ありがとう、これは確かに動作します。しかし、私はggplot2のパラメータを使ってこれを行う方法があるかどうかを調べたいと思います。私は、異なる変数を使用して私のプロットをfacet_wrapしたいかもしれませんし、すでに巨大な私のデータテーブルの冗長性を避けたいでしょう。 – beeprogrammer

+1

更新された回答を参照してください。また、コードはデータフレームオブジェクトに列を追加しません。追加の列は、ggplot関数内でのみ追加され、データフレームオブジェクト自体は変更されません。 – eipi10

関連する問題

 関連する問題