2016-10-22 118 views
6

我想知道是否有一種方法可以從R中的彼此中減去兩個分箱散點圖。我有兩個分佈具有相同的軸,並希望將一個疊加在另一個之上並因此減去它們產生差異散點圖。R - 差散點圖

這裏是我的兩個地塊:

enter image description hereenter image description here

和我對情節腳本:

​​

上如何去這將是非常有幫助的任何意見。

EDIT 實測值的附加的方法來做到這一點:

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

您只創建了一個陰謀。閱讀構建模擬數據的示例,並將代碼添加到您的quesiton正文中,以生成兩個類似於您正在使用的數據集。 –

回答

7

好了,作爲起點,這裏是一些示例數據。每個都是隨機的,一個移到(2,2)。

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

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

爲確保箱子完全相同,最好構建一個hexbin對象。爲了達到這個目的,我使用dplyrbind_rows來跟蹤數據來自哪個data.frame(如果您有一個帶有分組變量的單個data.frame,這會更容易)。

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


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

接下來,我們使用的hexbindplyr組合,以計算每個每個單元內的發生。首先,在整個箱子上應用,構建一個表格(需要使用factor來確保所有層次都顯示;如果您的專欄已經是一個因素,則不需要)。然後,它簡化它並構造一個數據框架,然後用mutate來處理計算差異,然後再回到一個表格,該表格給出每個id的x和y值。

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)給出:

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 

最後,我們使用ggplot2繪製得到的數據,因爲它提供了更多的控制權(以及更容易地使用不同的變量不是算作填充能力)比hexbin本身。

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

enter image description here

從那裏,很容易玩斧頭,顏色等