2016-03-26 27 views
1

Birden fazla faktör için ggplot2 boxplots'u geom_lines ile bağlamaya çalışıyorum. Şimdiye kadar bütün kutucukları çizgilerle birleştirmek için başarabiliyordum, resme bakın. Ancak, tek kutuları karşılık gelen faktörlere bağlamak istiyorum. ggplot kutu çizgilerini çizgiler ve çoklu faktör kullanarak bağlayın

enter image description here

benim değişken FL için Örneğin, ben kalan değişkenlerle bağlamadan, sadece bu iki Boxplot bağlamak istiyorum. Benzer şekilde, RW değişkeni için, bu iki cinsiyet kutu plotunu kalan diğerleri olmadan bağlar.

library("MASS") 
data(crabs) 
melt_crabs <- melt(crabs,id.var=c("sp","sex","index")) 
ggplot(melt_crabs, aes(x = variable, y = value)) + geom_line(aes(group = index), size = 0.05, alpha = 0.7) + geom_boxplot(aes(fill = sp), alpha = 0.5) + facet_grid(sex~.) 

Bunu nasıl yapacağını bilen var mı? Umarım kendime en açık yolu açıklarım.

Çok teşekkürler ve iyi dilek,

+0

Kodunuz göstermek rakam üretmez. Bence sadece seks ve sp'yi değiştirdin. – Stibu

+0

@Stibu Kodu cevapladığınız ve düzenlediğiniz için teşekkür ederiz. Bu konuda yeniyim ve özür dilerim diye düşündüm. Seks ve sp kullanılırsa, önemsiz değildir. Buradaki örnek, aynı faktörde iki kutu boşluğuna sahip olmak ve bunları birbirine bağlamaktır. Çok teşekkürler. –

cevap

1

. Cevabını inşa etmek, çünkü belirli bir değişken için, parseller artık yan yana değil, her birini kendi ayrı arsalarına koymak isteyebilirsiniz. Bu içinde facet_grid çağrıya yalnızca küçük çimdik ile kolayca olabilir @ Stibu kod:

ggplot(melt_crabs, aes(x = interaction(sex, variable), y = value)) + 
    geom_boxplot(aes(fill = sex), alpha = 0.5) + 
    geom_line(aes(group = interaction(index, variable)), 
      alpha = 0.5, colour = "darkgrey") + 
    facet_grid(sp~variable,scales="free_x") + 
    scale_x_discrete(labels = "") 
Ayrıca

enter image description here

Ben, bu değil mi alta üst şeridini taşımak istiyorsanız bazı kazma vermedi' t bu zor. kodunu uyarlanması: How to display strip labels below the plot when faceting?

Biz alıyorum:

p<-ggplot(melt_crabs, aes(x = interaction(sex, variable), y = value)) + 
    geom_boxplot(aes(fill = sex), alpha = 0.5) + 
    geom_line(aes(group = interaction(index, variable)), 
      alpha = 0.5, colour = "darkgrey") + 
    facet_grid(sp~variable,scales="free_x") + 
    scale_x_discrete(labels = "") 

# Convert the plot to a grob 
gt <- ggplotGrob(p) 

# Get the positions of the panels in the layout: t = top, l = left, ... 
panels <-c(subset(gt$layout, name == "panel", select = t:r)) 

# Get the strip grob & x-axis label grob 
stripGrob = gtable_filter(gt, "strip-top") 

#Replace x-axis ticks with strip 
gt = gtable_add_grob(gt, stripGrob, t = max(panels$b)+1, l = min(panels$l), r = max(panels$r)) 

# remove the old strip 
gt = gt[-(min(panels$t)-1), ] 

grid.newpage() 
grid.draw(gt) 

enter image description here

+0

Tüm yardımlarınız için teşekkürler. Interaction() işlevinin kullanımı ihtiyacım olan şeydi. Çok teşekkürler ve en iyi dileklerimle! –

+1

Yönlendirmeleri kullanmak için mükemmel bir fikir!Bu durumda, aslında x = etkileşim (cinsiyet, değişken) için daha fazla bir şeye ihtiyaç yoktur ve sadece x = cinsiyetini kullanabilirsiniz. Ben senin komployu tam olarak üretemiyorum; ggplot2 hangi sürümünü kullanıyorsunuz? En yeni sürümde, faset etiketlerini 'facet_grid()' içinde 'switch =" x "' kullanarak taşıyabilirsiniz. Bu sizin varyantınız kadar güzel görünmüyor, çünkü alt kısımdaki keneleri terk ediyor. Scale_x_discrete (label = NULL, break = NULL) ile daha güzel olur, ancak çözümünüz daha güzel gözüküyor. – Stibu

+0

Bu örnekte 1.0.1 sürümünü kullanıyordum ... biraz tarihli biliyorum. Ancak 'facet_grid()' işlevindeki 'switch =" x "' işlevini bilmiyordum, bu kesinlikle benzer bir çıktı elde etmenin daha hızlı bir yoludur. Teşekkürler! Ayrıca ggplot2 ve en son R sürümünün en son sürümünü yükledim ve aynı kod benim için çalışıyor gibi görünüyor, benim tek düşüncem belki de kullandığımız şebeke sürümünden farklı mıyız? 0.2.0 sürümünü kullanıyorum. –

3

Sana üretilen tam olarak arsa noktaları bağlamak için yol bilmiyorum. Ama sana benzer bir şeyi nasıl yapacağını gösterebilirim.

zorluk kutudiyagramlar bir çift ait tüm noktalar aynı x koordinatı paylaşmak olmasıdır (yani, variable için aynı değeri). Bu nedenle, her bir kutu plotunun kendi x değerine sahip olacağı şekilde 0-koordinat olarak interaction(sex, variable) kullandım. Bununla birlikte, eşleştirilmiş kutuların daha az görülebilir olduğu anlamına gelir. Diğer taraftan, bağlantı hatları diğer yönde çalışır.

Çizgileri çizmek için, bunlar interaction(index, variable) ile gruplandırılmıştır; bu, index ve variable için aynı değerleri paylaştıklarında veri noktalarının bağlandığı anlamına gelir.

kadar konuşma yeter, burada kod:

ggplot(melt_crabs, aes(x = interaction(sex, variable), y = value)) + 
    geom_boxplot(aes(fill = sex), alpha = 0.5) + 
    geom_line(aes(group = interaction(index, variable)), 
       alpha = 0.5, colour = "darkgrey") + 
    facet_grid(sp~.) + 
    scale_x_discrete(labels = rep(levels(melt_crabs$variable), each = 2)) 
Stibu cevabı İstenen çıktıyı almak için hızlı ve basit yoludur kesinlikle @

enter image description here