1.244 FAQ-1032 点密度图的有效性验证

Last Update: 11/27/2024


点密度图是使用散点图显示数据密度,其中散点的颜色映射到数据密度。而密度将使用核密度估计来计算。

为了计算核密度估计,Origin 使用了一种快速算法,该算法利用了 2D 区间逼近和 2D 插值。先把全图划分为若干小格子, 然后对每个格子内的(x,y)点进行计数,以获得具有区间计数的矩阵。然后利用 2D 快速傅立叶变换执行离散卷积,以计算每个网格的密度值。计算密度值的 4 次根以将密度标尺映射到色标。

Origin 可以使用同一数据集生成与 R 类似的结果

R 和 Origin 结果的比较

Density Plot Origin R Comparison.png

参考

数据:
1 个响应变量 (y), 1 预测变量 (x)
100000 观察值
生成的数据
数据文件: DP.csv

Origin 项目文件: density_dots_validation_sample.opju

生成图形的 R 代码

xx= read.csv("DP.csv",header=FALSE)
as.list(body(smoothScatter))
trace("smoothScatter",quote(browser()),at=19)

w<-c(0.056990976577602, 0.13442535086237)
smoothScatter(xx, nrpoints = 0,nbin=151,bandwidth=w)

#Debug and run following script
#Type "n" to enter line 19
stopifnot((nx <- length(xm)) == nrow(dens),
		  (ny <- length(ym)) == ncol(dens))
ixm <- 1L + as.integer((nx-1)*(x[,1]-xm[1])/(xm[nx]-xm[1]))
iym <- 1L + as.integer((ny-1)*(x[,2]-ym[1])/(ym[ny]-ym[1]))

z<-dens[cbind(ixm, iym)]
df<-data.frame(x=x[,1],y=x[,2],z=z)

library(ggplot2)
sp<-ggplot(df, aes(x,y,colour=z)) +  geom_point(shape=".") + 
	theme(panel.background = element_rect(fill = 'black'),
	panel.grid.major = element_blank(),
	panel.grid.minor = element_blank(),
	panel.border = element_blank())
sp
cval<-seq(0,1,length.out=6)
sp+scale_color_gradientn(values = cval,colours = rainbow(20))

Keywords:验证, 对比 R