如何在“星坐标”中绘制 5D 数据集?

机器算法验证 自习 数据可视化
2022-04-07 13:51:17

我正在阅读论文“星坐标:具有统一维度处理的多维可视化技术”并尝试绘制我的数据。

假设我有,一个五维数据点,并且点是通过论文中解释的公式计算的。 A(2,5,3,1,8)

星坐标的基本思想是将坐标轴排列在二维平面上的圆上,轴之间的角度相等(初始),原点位于圆的中心(图 1)。最初,所有轴具有相同的长度。数据点被缩放到轴的长度,最小映射到原点,最大值映射到轴的另一端。相应地计算单位向量。...

这只是将典型的 2d 和 3d 散点图扩展到更高维度的标准化。

我很难理解这个想法。我如何绘制它?主要问题是我无法理解论文中的公式。

2个回答

“星坐标”旨在以交互方式修改,从默认值开始。这个答案显示了如何创建默认值;交互式修改是一个编程细节。

中向量的集合这些首先在每个坐标内分别归一化,将数据线性变换到区间当然,这是通过首先从每个元素中减去它们的最小值并除以范围来完成的。调用标准化数据xj=(xj1,xj2,,xjd)Rd{xji,j=1,2,}[0,1]zj

的通常基础是向量集合i的地方。在这个基础上,“星坐标投影”映射的线性变换此映射应用于Rdei=(0,0,,0,1,0,0,,0)1ithzj=zj1e1+zj2e2++zjded{ui,i=1,2,,d}R2eiuiRdR2zj——它只是一个矩阵乘法——创建一个二维点云,描绘为一个散点图。绘制并标记单位向量ui

(交互式版本将允许用户单独旋转每个。)ui


为了说明这一点,这里有一个R应用于汽车性能特征数据集的实现。首先让我们获取数据:

library(MASS)
x <- subset(Cars93, 
       select=c(Price, MPG.city, Horsepower, Fuel.tank.capacity, Turn.circle))

第一步是规范化数据:

x.range <- apply(x, 2, range)
z <- t((t(x) - x.range[1,]) / (x.range[2,] - x.range[1,]))

默认情况下,让我们个等距单位向量这些决定了应用于的投影:duiprjz

d <- dim(z)[2] # Dimensions
prj <- t(sapply((1:d)/d, function(i) c(cos(2*pi*i), sin(2*pi*i))))
star <- z %*% prj

就是这样——我们都准备好了。它被初始化为数据点、坐标轴及其标签提供空间:

plot(rbind(apply(star, 2, range), apply(prj*1.25, 2, range)), 
     type="n", bty="n", xaxt="n", yaxt="n",
     main="Cars 93", xlab="", ylab="")

这是绘图本身,每个元素都有一条线:轴、标签和点:

tmp <- apply(prj, 1, function(v) lines(rbind(c(0,0), v)))
text(prj * 1.1, labels=colnames(z), cex=0.8, col="Gray")
points(star, pch=19, col="Red"); points(star, col="0x200000")

星图


要理解此图,将其与传统方法散点图矩阵进行比较可能会有所帮助:

pairs(x)

散点图矩阵


基于相关性的主成分分析 (PCA) 产生几乎相同的结果。

(pca <- princomp(x, cor=TRUE))
pca$loadings[,1]
biplot(pca, choices=2:3)

第一个命令的输出是

Standard deviations:
   Comp.1    Comp.2    Comp.3    Comp.4    Comp.5 
1.8999932 0.8304711 0.5750447 0.4399687 0.4196363 

大部分方差由第一个组成部分(1.9 对 0.83 或更小)解释。该组件上的负载大小几乎相等,如第二个命令的输出所示:

     Price           MPG.city         Horsepower Fuel.tank.capacity        Turn.circle 
 0.4202798         -0.4668682          0.4640081          0.4758205          0.4045867 

这表明——在这种情况下——默认星坐标图沿第一个主成分投影,因此基本上显示了第二个到第五个 PC 的一些二维组合。因此,它与 PCA 结果(或相关因素分析)相比的价值值得怀疑;主要优点可能在于建议的交互性。

虽然R的默认双标图看起来很糟糕,但这里是为了比较。为了使其更好地匹配星坐标图,您需要置换以与此双图中显示的轴序列一致。ui

双标图

除了@whuber 的好回答之外,为了更全面的覆盖,我想添加一些其他选项以在“星坐标”中显示多维(多变量)数据。我的回答侧重于R.

我将首先说星图(在蜘蛛雷达变体中)由R的基本graphics包通过功能支持stars()http ://stat.ethz.ch/R-manual/R-devel/library/graphics/html/星星.htmlR显然,“食物链”中的下一个是ggplot2包,AFAIK 目前没有针对这种类型的地块的特定功能(如果我不是最新的,请纠正我)。coord_polar()但是,可以在此处找到Hadley Wickham 使用 的基本实现此外,基于 ggplot2 的ggsubplot包提供了相关功能geom_star(): http: //www.inside-r.org/packages/cran/ggsubplot/docs/geom_star

其他包含星图功能的软件包包括:psych- 函数spider()radar()- http://personality-project.org/r/html/spider.htmlplotrix- 函数radial.plot()- http://onertipaday.blogspot.com/2009/01/radar -chart.html ),可能还有其他一些。

除了上述之外,应该注意的是,可以在支持 Web 的软件中创建星图,该软件可以轻松地与R. 例如,这里是星图的变体,plotly称为极地面积图:https ://plot.ly/r/polar-chart/#Polar-Area-Chart 。说到R基于 Web 的数据可视化,就不能不提很棒的 D3.js 库,它也可以从R. 以下是如何使用 D3.js 制作精美的星图:http: //www.visualcinnamon.com/2013/09/making-d3-radar-chart-look-bit-better.html