2016-05-10 30 views
10

giy çok değişkenli facet_wrap etiketleri ben istendiği gibi bu benim durumumda 22 araziler oluştururggplot2: bir satır

facet_wrap(x~y+z) 

olarak benim dağılım arsa bölmek facet_wrap kullanıyorum. Ancak, bu 22 parselin her biri için etiket, penceredeki boşluğu gereksiz yere tüketen ve arsaları küçük bir alana çeken 3 sıra halinde (x, y ve z) görüntülenir. Arsalarımın daha büyük olmasını istiyorum. Y ve z değişkenleri kısa olduğundan, bunları iki yerine aynı satırda görüntülemek isterim.

Etiketleyici seçeneklerine baktım ama hiçbiri istediğimi yapmıyor gibi görünüyor. Burada herhangi bir öneriniz için teşekkür ederiz.

cevap

9

Bu durumda da label_wrap_gen() düşünebilirsiniz: Daha fazla ayrıntı için

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

da here ve here bkz .

6

Bunu bir etiketleyici işleviyle nasıl yapacağımı bilmiyorum, ancak başka bir seçenek kategorik değişkenlerin üçünü bir araya getiren tek bir değişkende gruplandırma değişkenini oluşturmaktır. Burada, yerleşik mtcars veri çerçevesini ve yeni gruplama değişkenini anında oluşturmak için dplyr paketini kullanan bir örnek var. Bunu takiben, bir ila üç yüzdelik değişken arasında dinamik seçim sağlayan bir işlevle bir güncelleme.

library(dplyr) 

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

enter image description here

GÜNCELLEME: esneklik konusunda yorum ile ilgili, aşağıdaki kod, kullanıcı istenen veri çerçevesini ve dinamik biri üzerinde faset seçmekle birlikte değişken adları girmek için izin veren bir fonksiyondur iki veya üç sütun. Şimdi

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) 
} 

en işlevini deneyelim:

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

Teşekkür ederim, bu kesinlikle işe yarıyor. Bununla birlikte, bunu ggplot2 parametrelerini kullanarak yapmanın bir yolu olup olmadığını öğrenmek istiyorum. Farklı değişkenler kullanarak çizimlerimi facet_wrap etmek isteyebilir ve zaten büyük olan veri tablomda artıklıktan kaçınmak isteyebilirim. – beeprogrammer

+1

Güncellenmiş yanıtlara bakın. Ayrıca, kodun veri çerçeve nesnesine herhangi bir sütun eklemediğini de unutmayın. Ekstra sütun sadece ggplot işlevi içinde eklenir ve veri çerçeve nesnesinin kendisini değiştirmez. – eipi10