2013-03-19 16 views
7

To jest edytowana wersja poprzedniego pytania.Porównanie graficzne par kilku dystrybucji

Otrzymujemy e m przez n tabeli n obserwacji (próbki) w ciągu m zmiennych (geny, itd), i szuka do badania zachowania zmiennych między każdą parą obserwacji - Na przykład dwie obserwacje o najwyższej dodatniej lub ujemnej korelacji. W tym celu widziałem wspaniałą mapę w Stadler i in. Papier Nature (2011):

enter image description here

Tutaj może to być zestaw danych próbka ma być używany.

m <- 1000 
samples <- data.frame(unif1 = runif(m), unif2 = runif(m, 1, 2), norm1 = rnorm(m), 
         norm2 = rnorm(m, 1), norm3 = rnorm(m, 0, 5)) 

już przetestowany gpairs(samples) pakietu gpairs która produkuje ten jeden. To dobry początek, ale nie ma opcji, aby umieścić współczynniki korelacji na odcinku górnym prawym, ani działki gęstości na dolnym rogu:

enter image description here

Następny użyłem ggparis(samples, lower=list(continuous="density")) pakietu GGally (Dzięki @LucianoSelzer dla komentarz poniżej). Teraz mamy korelacje na górnym rogu i gęstości w dolnym rogu, ale brakuje nam ukośnych plamek, a wykresy gęstości nie mają kształtów termicznych.

enter image description here

Wszelkie pomysły, aby bardziej zbliżyć się do pożądanego obrazu (pierwszy)?

Odpowiedz

9

Możesz spróbować połączyć kilka różnych metod kreślenia i połączyć wyniki. Oto przykład, który można odpowiednio zmodyfikować:

cors<-round(cor(samples),2) #correlations 

# make layout for plot layout 
laymat<-diag(1:5) #histograms 
laymat[upper.tri(laymat)]<-6:15 #correlations 
laymat[lower.tri(laymat)]<-16:25 #heatmaps 

layout(laymat) #define layout using laymat 

par(mar=c(2,2,2,2)) #define marginals etc. 

# Draw histograms, tweak arguments of hist to make nicer figures 
for(i in 1:5) 
    hist(samples[,i],main=names(samples)[i]) 

# Write correlations to upper diagonal part of the graph 
# Again, tweak accordingly 
for(i in 1:4) 
    for(j in (i+1):5){ 
    plot(-1:1,-1:1, type = "n",xlab="",ylab="",xaxt="n",yaxt="n") 
    text(x=0,y=0,labels=paste(cors[i,j]),cex=2) 
    } 

# Plot heatmaps, here I use kde2d function for density estimation 
# image function for generating heatmaps 
library(MASS) 
for(i in 2:5) 
    for(j in 1:(i-1)){ 
    k <- kde2d(samples[,i],samples[,j]) 
    image(k,col=heat.colors(1000)) 
    } 

edycja: poprawiono indeksowanie ostatniej pętli. pairwise plot

+0

Wow! To wspaniale, dziękuję. Jestem ciekawy, czy jest jakaś wielka i krótka odpowiedź ggplot2. – Ali

+0

Założę się, że już, dopiero zacząłem się zapoznać z ggplot2, więc zdecydowałem się pojechać w starym stylu. ggplot2 używa grafiki siatki, więc pomysł na układ nie działa. Ale może to być pomocne: http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/ –