2016-10-22 25 views
6

R'de iki tane birbirinden ayrılan dağılımı çıkarmanın bir yolu olup olmadığını merak ediyordum. Aynı eksenleri olan iki tane dağılımım var, diğerinin üst üste bindirilmesi ve çıkarılması istiyorum. fark dağılımı çizimi.R - fark dağılım grafiği

enter image description hereenter image description here

ve arsalar için benim komut dosyası: çok yararlı olacağını bu konuda gitmek nasıl

library(hexbin) 
library(RColorBrewer) 

setwd("/Users/home/") 
df <- read.table("data1.txt") 
x <-df$c2 
y <-df$c3 

bin <-hexbin(x,y,xbins=2000) 
my_colors=colorRampPalette(rev(brewer.pal(11,'Spectral'))) 
d <- plot(bin, main="" , colramp=my_colors, legend=F) 

Herhangi bir tavsiye Burada

benim iki planları yer alıyor.

DÜZENLEME Bunu yapmak için ek bir yol Bulunan:

xbnds <- range(x1,x2) 
ybnds <- range(y1,y2) 
bin1 <- hexbin(x1,y1,xbins= 200, xbnds=xbnds,ybnds=ybnds) 
bin2 <- hexbin(x2,y2,xbins= 200, xbnds=xbnds,ybnds=ybnds) 
erodebin1 <- erode.hexbin(smooth.hexbin(bin1)) 
erodebin2 <- erode.hexbin(smooth.hexbin(bin2)) 
hdiffplot(erodebin1, erodebin2) 
+2

, eksenler, renklerle oynamak kolaydır Yalnızca bir arsa oluşturduk. Simüle edilmiş veri oluşturma örneklerini okuyun ve quesiton bedeninize, üzerinde çalıştığınız şeylere benzeyen iki veri kümesi üreten bir kod ekleyin. –

cevap

7

Pekala, bir başlangıç ​​noktası olarak, burada bir örnek verilerdir. Her biri rastgele, bir tanesi (2,2) ile değiştirilir.

df1 <- 
    data.frame(
    x = rnorm(1000) 
    , y = rnorm(1000) 
) 

df2 <- 
    data.frame(
    x = rnorm(1000, 2) 
    , y = rnorm(1000, 2) 
) 

depo aynı olmasını sağlamak için, bu bir hexbin nesnesini oluşturmak için en iyisidir. Bunu başarmak için dplyr'un bind_rows numarasını kullanıyorum. Verilerin hangi data.frame'den geldiğini takip etmek için (grup değişkenine sahip tek bir data.frame olsaydınız bu daha kolay olurdu).

bothDF <- 
    bind_rows(A = df1, B = df2, .id = "df") 


bothHex <- 
    hexbin(x = bothDF$x 
     , y = bothDF$y 
     , IDs = TRUE 
     ) 

Sonra, her bir hücrenin içindeki her yineleme sayısını hexbin ve dplyr bir karışımını kullanıyor. Öncelikle, bir tablo inşa ederek (tüm seviyelerin gösterildiğinden emin olmak için factor'u kullanmanız gerekir; sütununuz zaten bir faktör ise gerekli değildir) kutulara uygulayın. Daha sonra, bunu basitleştirir ve sayımlardaki farkı hesaplamak için mutate ile manipüle edilen bir data.frame oluşturur ve sonra her bir id için x ve y değerlerini veren bir tabloya tekrar katılır.

counts <- 
    hexTapply(bothHex, factor(bothDF$df), table) %>% 
    simplify2array %>% 
    t %>% 
    data.frame() %>% 
    mutate(id = as.numeric(row.names(.)) 
     , diff = A - B) %>% 
    left_join(data.frame(id = [email protected], hcell2xy(bothHex))) 

head(counts) verir:

A B id diff   x   y 
1 1 0 7 1 -1.3794467 -3.687014 
2 1 0 71 1 -0.8149939 -3.178209 
3 1 0 79 1 1.4428172 -3.178209 
4 1 0 99 1 -1.5205599 -2.923806 
5 2 0 105 2 0.1727985 -2.923806 
6 1 0 107 1 0.7372513 -2.923806 

Son olarak, daha fazla kontrol (ve daha kolay doldurur sayılır farklı bir değişkeni kullanma olanağı) daha sunmaktadır olarak biz, ortaya çıkan verileri çizmek ggplot2 kullanmak hexbin'un kendisi. Oradan

enter image description here

counts %>% 
    ggplot(aes(x = x, y = y 
      , fill = diff)) + 
    geom_hex(stat = "identity") + 
    coord_equal() + 
    scale_fill_gradient2() 

, vb