R - 差异散点图

时间:2016-10-22 17:03:49

标签: r plot scatter

我想知道是否有办法在R中相互减去两个分箱散点图。我有两个具有相同轴的分布,并希望将一个叠加在另一个上面并减去它们,从而产生差异散点图

以下是我的两个情节:

enter image description here enter 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)

1 个答案:

答案 0 :(得分: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的{​​{1}}来跟踪数据来自哪个data.frame(如果您有一个带有分组变量的data.frame,这将更加容易)。

bind_rows

接下来,我们使用bothDF <- bind_rows(A = df1, B = df2, .id = "df") bothHex <- hexbin(x = bothDF$x , y = bothDF$y , IDs = TRUE ) hexbin的混合来计算每个单元格中每个的出现次数。首先,在整个分档中应用,构建一个表(需要使用dplyr来确保显示所有级别;如果列已经是一个因素则不需要)。然后,它简化了它并构造了一个data.frame,然后用factor进行操作以计算计数差异,然后连接回一个表,给出每个id的x和y值。

mutate

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 = bothHex@cell, 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

enter image description here

从那里,可以很容易地玩斧头,颜色等。