2017-07-29 28 views
10

these examples'da gösterildiği gibi bir gyptree içeren bir arsaya panel olarak bir joyplot eklenebilir mi? Joyplot'ların örnekleri here'dur.ggtree ile ggjoy faset

Elek türü etiketlerini ağaç ucu etiketleri ile aynı sıraya koyabildiğimi anlıyorum, ancak otomatik bir çözüm arıyorum. Joyplot satırlarını otomatik olarak ağaçların ipuçlarıyla ilişkilendirmek istiyorum, bu da boxplot verilerinin uç etiketleri ile nasıl ilişkilendirildiğine benzer.

Yukarıdaki linkten Guangchuang Yu'nun örnekler uygun veri sağlamak olduğunu düşünüyorum:

require(ggtree) 
require(ggstance) 

# generate tree 
tr <- rtree(30) 

# create simple ggtree object with tip labels 
p <- ggtree(tr) + geom_tiplab(offset = 0.02) 

# Generate categorical data for each "species" 
d1 <- data.frame(id=tr$tip.label, location=sample(c("GZ", "HK", "CZ"), 30, replace=TRUE)) 

#Plot the categorical data as colored points on the tree tips 
p1 <- p %<+% d1 + geom_tippoint(aes(color=location)) 

# Generate distribution of points for each species 
d4 = data.frame(id=rep(tr$tip.label, each=20), 
      val=as.vector(sapply(1:30, function(i) 
          rnorm(20, mean=i))) 
      )    

# Create panel with boxplot of the d4 data 
p4 <- facet_plot(p1, panel="Boxplot", data=d4, geom_boxploth, 
     mapping = aes(x=val, group=label, color=location))   
plot(p4) 

Bu aşağıda arsa üretir: o Boxplot yerine bir joyplot yaratmak mümkün demo ggtree plot

mi? İşte

yukarıdaki demo veri kümesi d4 hızlı joyplot kodudur:

require(ggjoy) 

ggplot(d4, aes(x = val, y = id)) + 
geom_joy(scale = 2, rel_min_height=0.03) + 
scale_y_discrete(expand = c(0.01, 0)) + theme_joy() 

sonucu geçerli: demo joyplot

Ben ggplot2 ggtree ve tamamen am at yüzden ggjoy yeni am Bunu yapmaya nasıl başlayacağınız ile ilgili bir kayıp.

+0

Birlikte çalışma konusunda bazı uygun örnek verileri sağlayabilir mi? Sorunuza "dput (data_sample)" – eipi10

+0

@ eipi10 çıktısını yapıştırın. Ggtree paketinin yaratıcısı tarafından yazılan bir demo kodu ekledim. 'Dput (data_sample)' ile ne kastettiğinizden emin değilim – LCM

cevap

11

Not: 2017-09-14 itibariyle, ggjoy package has been deprecated. Bunun yerine, ggridges package kullanın. Aşağıdaki kod ggridges ile çalışmak için geom_joy yerine geom_density_ridges kullanın. Sadece facet_plot yılında geom_joy ile geom_boxplot yerine benzeri


görünüyor:

facet_plot(p1, panel="Joy Plot", data=d4, geom_joy, 
      mapping = aes(x=val, group=label, fill=location), colour="grey50", lwd=0.3) 

enter image description here

Eğer yazarın, the visualization chapter of Data Science with R (bir açık kaynak kitap ggplot2 yeniyseniz ggplot2) temellerini öğrenmek için yararlı olmalıdır.

ggjoy ve ggtree ggplot2'nin yeteneklerini genişletir. Bu tür uzantılar iyi yapıldığında, ("gigplot" grafiklerin dilbilgisi "terimleriyle)" apaçık "olayı genellikle işe yarar çünkü uzatma paketi, alttaki ggplot2 yaklaşımına sadık kalmaya çalışacak şekilde yazılır.

İlk düşüncem, işin bitmesi için geom_boxplot numaralı telefonun yerine geom_joy'un yerini almasıydı. Her bir geom, verileri görselleştirmek için farklı bir yoldur, bu durumda kutu çizimine karşı yoğunluk grafiği. Fakat arsadaki diğer "yapı" nın hepsi aynı kalır, bu yüzden sadece coğrafi bölgeleri değiştirebilir ve aynı eksen sıralamasını, renk eşlemelerini vb. Izleyen yeni bir arsa edinebilirsiniz. Bu, biraz tecrübe edindikten sonra daha anlamlı olacaktır. ggplot2 grafik dilbilgisi.

Burada sol arsa için çok az farklı etiketleme yaklaşım:

p1 = ggtree(tr) %<+% d1 + 
    geom_tippoint(aes(color=location), size=6) + 
    geom_tiplab(offset=-0.01, hjust=0.5, colour="white", size=3.2, fontface="bold") 

facet_plot(p1, panel="Joy Plot", data=d4, geom_joy, 
      mapping = aes(x=val, group=label, fill=location), colour="grey40", lwd=0.3) 

enter image description here

GÜNCELLEME: Bu ikisinde de aynı özel renkleri nasıl soran yorumunuza yanıt olarak faset panelleri. İşte kod sorunuzu örnek verilerle bunu açıklanmıştır:

p1 = ggtree(tr) %<+% d1 + 
    geom_tippoint(aes(color=location), size=5) + 
    geom_tiplab(offset=-0.01, hjust=0.5, colour="white", size=3, fontface="bold") + 
    scale_colour_manual(values = c("grey", "red3", "blue")) + 
    scale_fill_manual(values = c("grey", "red3", "blue")) 

facet_plot(p1, panel="Joy Plot", data=d4, geom_joy, 
      mapping = aes(x=val, group=label, fill=location), colour="grey40", lwd=0.3) 

enter image description here

+0

Çok teşekkürler! Özel bir renk skalasını nasıl ayarlayabilirim ve bunu joyplot'a nasıl devam ettirebilirim? Geom_tippoint() için ikili kategoriler içeren bir ağacım var; Renkleri '+ scale_colour_manual (values ​​= c (" no "=" grey "," yes "=" red3 "))' ı kullanarak seçebilirim fakat bu renk düzeninin mızrak kısmına nasıl uzandığını anlayamıyorum . Scale_colour_manual() kullanırsam hatayı alıyorum "Scale for 'color" zaten mevcut. Mevcut ölçeğin yerini alacak olan' color 'için başka bir ölçek eklemek. Fakat mafsal varsayılan renkleri korur. – LCM

+1

scale scale_fill_manual (değerler = c ("no" = "grey", "yes" = "red3")) 'i ilk arsaya ekleyin ve' facet_plot' öğesini yaptığınızda devam edecektir. geom_joy bir 'dolgu' estetiği kullanıyor, bu yüzden dolgu renklerini "scale_colour_manual" yerine "scale_fill_manual" ile ayarlamanız gerekiyor. Sadece "renkler" ve "dolgu" için aynı renkleri kullanın ve yüzler çizildiğinde eşleşir. "ölçekler" (renk skalaları, şekil skalaları, eksen aralıkları ve kırılmalar, vs.), ggplot2'de yer alan "grafiklerin dilbilgisi" nin başka bir yönüdür. – eipi10

+0

Bunu yaptığımda mızrak ucu için istenen renkleri (gri ve kırmızı) alırım ancak ağaç uçları için değil. Şu anda tekrarlanabilir bir örneğim yok, ama belki de sentakstan söyleyebilirsiniz: 'baseplot <- p% <+% d1 + geom_tippoint (aes (renk = faktör (HybridizesLax), cex = 1)) + scale_fill_manual (değerler = c ("hayır" = "gri", "evet" = "red3")) + tema (legend.position = "left") ve tree_joyplot <- facet_plot (tabanlot, panel = "Yıllık ortalama sıcaklık (C) ", data = amt_data, geom_joy, eşleme = aes (x = amt, grup = etiket, dolgu = factor (HybridizesLax)), color =" grey50 ", lwd = 0.3)' – LCM

İlgili konular