三维散点图的替代方案

机器算法验证 r 数据可视化 散点图
2022-04-10 12:09:38

对于演示文稿,我必须可视化三维数据。我应该以“散点图的样式”将它们可视化。

可能最初的想法是

  • 三维散点图
  • 散点图矩阵
  • 降维(PCA)和之后的二维散点图

这些概念的替代方案是什么?如果可能,请在您的答案中包含 R 代码。

编辑:我有 40 个具有 3 个维度的对象。每个观察值可以取一个从 1 到 6 的整数值。

1个回答

我认为主要需要添加到您的列表中的是coplots,但让我们努力做到这一点。可视化两个连续变量的起点应该始终是散点图。具有两个以上的变量,可以自然地推广到散点图矩阵(尽管如果您有很多变量,您可能需要将其分解为多个矩阵,请参阅:How to extract information from a scatterplot matrix when you have large N,discrete数据和许多变量?)。需要认识到的是,散点图矩阵是一组来自高维空间的 2D边缘 投影。这些边距可能不是最有趣或信息最丰富的。究竟是哪个您可能想要查看的边距是一个棘手的问题(参见投影追踪),但最简单的下一组要检查的是使变量正交的一组,即由主成分分析产生的变量的散点图。您提到使用它来减少数据并查看前两个主成分的散点图。这背后的想法是合理的,但您不必只看前两个,其他可能值得探索(参见PCA 示例,其中低方差的 PC “有用”),因此您可以/应该一个散点图矩阵,也是。PCA 输出的另一种可能性是制作双标图,它覆盖了原始变量与散点图顶部的主成分(如箭头)相关的方式。您还可以将主成分的散点图矩阵与双图相结合。

正如我所提到的,以上所有这些都是边际的。coplot 是有条件的(我的答案上半部分对比了有条件的与边际的)。从字面上看,“coplot”是“conditional plot”的混合词。在 coplot 中,您正在获取其他维度上的数据切片(或子集),并在一系列散点图中绘制这些子集中的数据。一旦你学会了如何阅读它们,它们是你探索高维数据模式的选项集的一个很好的补充。

为了说明这些想法,这里有一个 RandU 数据集的示例(由 1970 年代流行的算法生成的伪随机数据):

data(randu)
windows()
  pairs(randu)

在此处输入图像描述

pca = princomp(randu)
attr(pca$scores, "dimnames")[[1]][1:400] = "o"
windows()
  par(mfrow=c(3,3), mar=rep(.5,4), oma=rep(2,4))
  for(i in 1:3){
    for(j in 1:3){
      if(i<j){
        plot(y=pca$scores[,i], x=pca$scores[,j], axes=FALSE); box()
      } else if(i==j){
        plot(density(pca$scores[,i]), axes=FALSE, main=""); box()
        text(0, .5, labels=colnames(pca$scores)[i])
      } else {
        biplot(pca, choices=c(j,i), main="", xaxp=c(-10,10,1), yaxp=c(-10,10,1))
      }
    }
  }

在此处输入图像描述

windows()
  coplot(y~x|z, randu)

在此处输入图像描述