按到邻居的距离绘制散点图颜色

Scatterplot colour by distance to neighbour

我正在尝试通过根据邻域密度对点进行着色来根据 tSNE 结果创建一个图 - 即该点周围的邻居数量和与邻居的距离。

给定一个 tSNE 结果坐标矩阵:

            [,1]       [,2]
  [1,] -4.2060515  3.1718312
  [2,] -4.2671476  5.6677296
  [3,] -3.1792470  3.5504695
  [4,] -3.2507526  4.7510075
  [5,] -4.5662531  3.3866132
  [6,] -5.0863544  3.1760014
  [7,] -4.7380256  5.5291478
  [8,] -5.0510355  5.0373626
  [9,] -4.3288679  4.3316772
 [10,] -5.2947188  4.6130757
[etc,] ...         ...

我希望能够根据上述标准为点着色。

但到目前为止我能得到的只有这个,这只是平均欧氏距离,但这是不正确的:

理想情况下,我喜欢看起来类似于粗略模型的东西,其中靠得更近的点比局部邻居较少的点颜色更深:

d <- dist(best.tsne, method = "euclidean")`
d.scaled <- quick.scale(apply(as.matrix(d), 2, sum),
                        floor = 0, ceiling = 1)
ii <- cut(d.scaled,
          breaks = seq(min(d.scaled), max(d.scaled), len = 100),
          include.lowest = TRUE)
colors <- colorRampPalette(c("white", "blue"))(99)[ii]

我可以分配颜色等。只需要能够计算分数即可。

有很多方法,但最常见的是使用二维核或生成一个类似于您所做的但更适合数据的度量。

我举几个例子:

1 - 二维内核:

# With kde2d {MASS}
library(MASS)
attach(geyser)
plot(duration, waiting, xlim = c(0.5,6), ylim = c(40,100))
f1 <- kde2d(duration, waiting, n = 50, lims = c(0.5, 6, 40, 100))
image(f1)

2 - 临时测量 (1):

# Trimean 20%
apply(as.matrix(d), 2, mean, trim = 0.8)

3 - 临时测量 (2):

# Normalized inverse distance
apply(as.matrix(1/((1+d)/max(1+d))), 2, mean)

问候!!