【问题标题】:Dots instead of labels for biplot.prcompbiplot.prcomp 的点而不是标签
【发布时间】:2014-03-14 11:28:45
【问题描述】:

我想为prcomp 主成分分析创建一个biplot。但是,由于我的矩阵中有 lots 行,我不想打印所有这些标签。我最关心的是整体分布,而不是所有细节。所以我只想将数据点表示为点,没有标签。我该怎么做?

现在我做这样的事情:

biplot(prcomp(data, scale.=T), xlabs=rep(".", nrow(data)))

但我担心这是使用 character '.' 将位于文本的基线,因此与实际应该指向的位置稍有偏离是,从而给出整体变化的外观。这种担忧是否合理?如何避免这种情况?有没有更简单的替代方案?

除随处可见的点外,任何标注离图中心很远的异常值的解决方案都会获得奖励积分。但这听起来确实很棘手。

看看stats:::biplot.default,以及它如何调用plot(x, type = "n", …),很可能不是故意绘制这些点,所以我担心我所要求的甚至可能是不可能的。但也许有某种技巧可以解决这个问题。

【问题讨论】:

    标签: r plot pca


    【解决方案1】:

    我认为你的“。”将垂直居中,而不是移到底部(我认为这是您关心的问题?)

    比较不同的 xlab:

    set.seed(123) #thanks to MvG for spotting
    data = cbind(rnorm(25), rnorm(25), rnorm(25))
    biplot(prcomp(data, scale.=T), xlabs=rep(".", nrow(data))) #your code
    X11()
    biplot(prcomp(data, scale.=T), xlabs=rep("·", nrow(data))) #"middle dot"
    X11()
    biplot(prcomp(data, scale.=T), xlabs=rep("˙", nrow(data))) #"dot above"
    X11()
    biplot(prcomp(data, scale.=T), xlabs=rep(".·˙", nrow(data))) #all three
    X11()
    biplot(prcomp(data, scale.=T), xlabs=rep("I", nrow(data)))
    

    对我来说(Win7 上的 R-3.0.1)看起来情节考虑了字符的大小/形状,因为三个单点示例实际上是相同的,尽管它们的相对垂直定位,并且所有出现在绘制“I”的中间。

    如果您了解如何从 prcomp 输出生成双标图值(我不了解):

    str(prcomp(data, scale.=T)
    

    你可以用

    制作一个空白的双标图
    xlabs=rep("", nrow(data))
    

    并使用手动制作的 points() 添加到其中,但我认为它看起来是一样的。您的 xlab 也不限于使用您在键盘上看到的内容,因为您可以使用各种特殊字符,例如■●▲

    【讨论】:

    • 不错的答案。事后看来,简单地测试我的担忧是否有效似乎很明显,但我不知道如何打开多个窗口,这对于比较结果至关重要。稍后添加点听起来是一个有趣的想法,但需要复制biplot.prcomp 的大部分内容,以及lam 的所有计算。我不确定set.seed=123 是否有意义;我想应该是set.seed(123)。它是一个函数,而不是一个变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2020-05-19
    • 2011-02-19
    相关资源
    最近更新 更多