2017-02-14 26 views
11

ggplot2 ile birden fazla ızgara çizimi oluşturmaya çalıştım. Bu yüzden böyle farklı gruplar ve değişkenler için dağıtım x ekseni altında ek Boxplot ile arsa ve üretmek istiyoruz:ggplot2 - çoklu ölçeklendirme ölçeklendirme

Example

KODU: yapmaya çalıştığım o aşağıdaki kodla:

library(ggplot2) 
require(grid) 

x=rbind(data.frame(D1=rnorm(1000),Name="titi",ID=c(1:1000)), 
    data.frame(D1=rnorm(1000)+1,Name="toto",ID=c(1:1000))) 

space=1 
suite=1 
p1=ggplot(x, aes(x=D1, color=Name, fill=Name)) + 
geom_histogram(aes(y=..density..),alpha=0.35,color=adjustcolor("white",0),position="identity",binwidth = 0.05)+ 
    geom_density(alpha=.2,size=1)+ 
    theme_minimal()+ 
    labs(x=NULL,y="Density")+ 
    theme(legend.position = "top", 
     legend.title = element_blank())+ 
    scale_fill_manual(values=c("gray30","royalblue1"))+ 
    scale_color_manual(values=c("gray30","royalblue1")) 

p2=ggplot(x, aes(x=factor(Name), y=D1,fill=factor(Name),color=factor(Name)))+ 
    geom_boxplot(alpha=0.2)+ 
    theme_minimal()+ 
    coord_flip()+ 
    labs(x=NULL,y=NULL)+ 
    theme(legend.position = "none", 
     axis.text.y = element_blank(), 
     axis.text.x = element_blank(), 
     panel.grid.minor.x = element_blank(), 
     panel.grid.major.x = element_blank(), 
     panel.grid.minor.y = element_blank(), 
     panel.grid.major.y = element_blank())+ 
    scale_fill_manual(values=c("gray30","royalblue1"))+ 
    scale_color_manual(values=c("gray30","royalblue1")) 

grid.newpage() 
pushViewport(viewport(layout=grid.layout(5,1))) 
define_region <- function(row, col){ 
    viewport(layout.pos.row = row, layout.pos.col = col) 
} 
print(p1, vp=define_region(1:4,1)) 
print(p2, vp=define_region(5,1)) 

SONUÇ:

enter image description here

SORU: Aramam sırasında yoğunluk dağılımı çizimi ile kutu tabanı arasındaki o ölçeğin aynı olmadığını gözlemledim (problem 1). Bu iki grafiği ızgarada çizmek için çözüm bulamadım (kayboldum).

+0

@Henrik teşekkürler seçenek için çok. Bu çözümü çoktan test ettim ama bundan emin değilim. –

+0

satırı eklemek p2 <-p2 + tema (plot.margin = birim (c (0,0.3,0,1,5), "cm")) 'bir tutam çalışacaktır. Bu çözümle boxplot kenar boşluklarının hassas ayarlanması gerekebilir. Belki birisi hem p1’i hem de “p1” kenar boşluklarını kullanarak ve p2'yi uygulayarak bir yol bulabilir. – N8TRO

cevap

10

cowplot paketi ile bu biraz daha kolaylaşır. Bununla birlikte, her iki grafik için de aynı olduklarından emin olmak için x ekseni aralığını doğru bir şekilde ayarlamalıyız. Bunun nedeni, yoğunluk grafikleri doğal olarak saf veri grafiğinden biraz daha geniş ve p1 için eksen biraz daha geniş olacaktır. Eksenler sabitlendiğinde onları düzenleyebilir ve hizalayabiliriz (eksen metni ve kenar boşlukları artık önemli olmayacaktır). kombinasyon araziler

enter image description here

library(cowplot) 
comb <- plot_grid(p1 + xlim(-5, 5), 
        p2 + ylim(-5, 5),    # use ylim for p2 because of coord_flip() 
        align = 'v', rel_heights = c(4, 1), nrow = 2) 
Aynı şekilde biz ayarlayabiliriz katları:

plot_grid(comb, comb, comb, comb) 

enter image description here

+0

MAGIC !!! Çok teşekkürler @Axeman: D –

İlgili konular