Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-减去两个平滑散点图_R_Plot_Heatmap - Fatal编程技术网

R-减去两个平滑散点图

R-减去两个平滑散点图,r,plot,heatmap,R,Plot,Heatmap,我有两个smoothScatter图,希望减去它们。见下文: par(mfrow=c(1,2)) set.seed(3) x1 = rnorm(1000) y1 = rnorm(1000) smoothScatter(x1,y1,nrpoints=length(x1),cex=3) x2 = rnorm(200) y2 = rnorm(200) smoothScatter(x2,y2,nrpoints=length(x2),cex=3,colramp=colorRampPalette(c("w

我有两个
smoothScatter
图,希望减去它们。见下文:

par(mfrow=c(1,2))
set.seed(3)
x1 = rnorm(1000)
y1 = rnorm(1000)
smoothScatter(x1,y1,nrpoints=length(x1),cex=3)

x2 = rnorm(200)
y2 = rnorm(200)
smoothScatter(x2,y2,nrpoints=length(x2),cex=3,colramp=colorRampPalette(c("white","red")))
我的希望是,我可以产生一个第三个情节,这是一个丰富多彩的减法从第二个情节的第一个情节。也就是说,会有蓝色和红色的区域,如果可能的话,我想把重叠区域变成灰色。但我希望颜色与新的密度一致。例如,新地块的中心几乎完全是灰色的,而外部可能有一些灰色,但也有蓝色和红色的斑块。请注意,这两个图的点数不同。我怎么能做这样的事

我能想到的唯一方法就是逐像素地从一个绘图到另一个绘图减去颜色。问题是,我不知道如何抓取每个像素的颜色强度来做到这一点。然而,即使我做到了这一点,白色减去白色可能会得到黑色,这是我不想要的


提前谢谢

> P> >您可以考虑使用略微透明的颜色< /P>
#helper function to make transparent ramps
alpharamp<-function(c1,c2, alpha=128) {stopifnot(alpha>=0 & alpha<=256);function(n) paste(colorRampPalette(c(c1,c2))(n), format(as.hexmode(alpha), upper.case=T), sep="")}
下面是此代码生成的


如果你仍然想得到绘图中的实际颜色值,这实际上有点棘手。您必须使用数据直接调用
grDevices::.smoothScatterCalcDensity
。然后,您必须通过取第四个根并重新缩放到0-1来转换返回的
fhat
值。然后通过获取这些值将其转换为颜色,然后使用公式
floor((256-1e-05)*z+1e-07)将这些值(我们称之为
z
转换为索引)+1
。然后使用这些索引从您提供的渐变生成的256色中查找一个值。这有点疯狂,但您可以将源代码读取到
smoothScatter
image。默认情况下
可以查看它是如何发生的。

来自
?smoothScatter
看起来这些都是用
bkde2D生成的e> 函数,并且从
?bkde2D
看起来您可以使用该函数输出的
x1
x2
fhat
元素获取逐像素的数据。是的,但我不确定如何获取给定特定(x1,x2)位置的颜色值
smoothScatter(x1,y1,nrpoints=length(x1),cex=3, colramp=alpharamp("white",blues9))
par(new=T)
smoothScatter(x2,y2,nrpoints=length(x2),cex=3,colramp= alpharamp("white","red"), axes=F, ann=F)