2016-10-22 10 views
6

मैं सोच रहा था कि आर में एक दूसरे से दो बिंच स्कैटर प्लॉट्स को घटाने का कोई तरीका है या नहीं। मेरे पास एक ही अक्ष के साथ दो वितरण हैं और दूसरे के ऊपर एक ओवरले करना चाहते हैं और इसलिए उन्हें घटाएं एक अंतर बिखरने साजिश का उत्पादन।आर - अंतर स्कैटर प्लॉट

enter image description hereenter image description here

और भूखंडों के लिए मेरी स्क्रिप्ट:

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) 

कैसे इस बारे में जाने के लिए बहुत मददगार होगा पर कोई सलाह

यहाँ मेरी दो भूखंडों हैं।

संपादित मिले यह करने के लिए एक अतिरिक्त तरीका:

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 body में कोड जोड़ें जो दो डेटासेट उत्पन्न करता है जो आप के साथ काम कर रहे हैं। –

उत्तर

7

ठीक है, एक प्रारंभिक बिंदु के रूप में, यहाँ कुछ नमूना डेटा है। प्रत्येक यादृच्छिक है, एक के साथ स्थानांतरित (2,2)।

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

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

यह सुनिश्चित करने के डिब्बे समान हैं, यह एक hexbin वस्तु के निर्माण के लिए सबसे अच्छा है। इसे पूरा करने के लिए, मैं डेटा का डेटा रखने के लिए dplyr के bind_rows का उपयोग कर रहा हूं। डेटा को देखने के लिए डेटा से आया था (यदि आपके पास एक डेटािंग चर के साथ एक डेटा था। यह भी आसान होगा)।

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


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

इसके बाद, हम प्रत्येक कोशिका के भीतर प्रत्येक की घटनाओं की गिनती करने के hexbin और dplyr का मिश्रण का उपयोग कर रहे हैं। सबसे पहले, एक टेबल बनाने के लिए डिब्बे पर लागू करें (यह सुनिश्चित करने के लिए कि सभी कॉलम पहले से ही एक कारक हैं, आवश्यक नहीं है, factor का उपयोग करने की आवश्यकता है)। फिर, यह इसे सरल बनाता है और डेटा.फ्रेम बनाता है जिसे गणना में अंतर की गणना करने के लिए mutate के साथ छेड़छाड़ की जाती है और फिर उस तालिका में शामिल हो जाती है जो प्रत्येक आईडी के लिए 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

वहाँ से, यह, कुल्हाड़ियों, रंगों के साथ चारों ओर खेलने के लिए आसान है आदि

संबंधित मुद्दे