我有一组包含23个变量的观察结果。

当我使用prcomp和biplot绘制结果时,我遇到了几个问题:


实际图仅占据帧的一半(x 两个变量清楚地支配了结果,因此所有其他箭头都聚集在一起,我看不懂任何东西


广告1.我尝试设置xlim和/或ylim,但是我显然做错了,因为在我这样做时,情节被搞砸了

广告2.我能以某种方式使箭头标签分开放置以便阅读吗?或者,也许我只绘制没有两个最长箭头的箭头(有点放大)?



附录:双线绘图是否可能以与箭头不同的颜色绘制标签?

另外:x和y轴不成比例是否有问题(它们的图表显示x和y上的长度间隔不同)。
我认为这会使箭头之间的天使倾斜,并且这种调整大小不是相似性转换。
是否可以强制Biplot保持1:1的宽高比,或者将绘图绘制为矩形而不是正方形?

最佳答案

我认为您可以使用xlimylim。另外,请查看expand?biplot参数。不幸的是,您没有提供任何数据,因此让我们获取一些示例数据:

a <- princomp(USArrests)


下面只是调用biplot的结果:

biplot(a)




现在,可以使用xlimylim来“放大”以更仔细地查看“谋杀”和“强奸”,还可以使用expand中的缩放参数?biplot

biplot(a, expand=10, xlim=c(-0.30, 0.0), ylim=c(-0.1, 0.1))




请注意,由于expand因素,上,右轴的缩放比例不同。

这是否有助于使您的情节母马可读?

编辑

您还询问标签和箭头是否可以使用不同的颜色。 biplot不支持此功能,您可以做的是复制stats:::biplot.default的代码,然后根据需要进行更改(使用colplotaxis时更改text参数) 。

或者,您可以将ggplot用于双图。在here帖子中,实现了一个简单的biplot函数。您可以如下更改代码:

PCbiplot <- function(PC, x="PC1", y="PC2", colors=c('black', 'black', 'red', 'red')) {
    # PC being a prcomp object
    data <- data.frame(obsnames=row.names(PC$x), PC$x)
    plot <- ggplot(data, aes_string(x=x, y=y)) + geom_text(alpha=.4, size=3, aes(label=obsnames), color=colors[1])
    plot <- plot + geom_hline(aes(0), size=.2) + geom_vline(aes(0), size=.2, color=colors[2])
    datapc <- data.frame(varnames=rownames(PC$rotation), PC$rotation)
    mult <- min(
        (max(data[,y]) - min(data[,y])/(max(datapc[,y])-min(datapc[,y]))),
        (max(data[,x]) - min(data[,x])/(max(datapc[,x])-min(datapc[,x])))
        )
    datapc <- transform(datapc,
            v1 = .7 * mult * (get(x)),
            v2 = .7 * mult * (get(y))
            )
    plot <- plot + coord_equal() + geom_text(data=datapc, aes(x=v1, y=v2, label=varnames), size = 5, vjust=1, color=colors[3])
    plot <- plot + geom_segment(data=datapc, aes(x=0, y=0, xend=v1, yend=v2), arrow=arrow(length=unit(0.2,"cm")), alpha=0.75, color=colors[4])
    plot
}


绘制如下:

fit <- prcomp(USArrests, scale=T)
PCbiplot(fit, colors=c("black", "black", "red", "yellow"))




如果您对此功能有所了解,我相信您可以弄清楚如何设置xlimylim值等。

07-24 09:52