如果执行help(prcomp)
or ?prcomp
,帮助文件会告诉我们prcomp()
函数返回的对象中包含的所有内容。我们只需要选择我们想要绘制的东西,并使用一些比biplot()
.
对于帮助文件没有说明问题的情况,一个更通用的技巧是str()
对 prcomp 对象(在您的情况下为 pca.Sample)执行 a 以查看其所有部分并找到我们想要的(str()
紧凑地显示 R 的内部结构目的。 )
以下是 R 的一些示例数据的示例:
# do a pca of arrests in different states
p<-prcomp(USArrests, scale = TRUE)
str(p)
给了我一些丑陋且太长的东西,但我可以看到 p$x 将状态作为行名,并将它们在主成分上的位置作为列。有了这个,我们可以用任何我们想要的方式来绘制它,比如用plot()
and text()
(用于标签):
# plot and add labels
plot(p$x[,1],p$x[,2])
text(p$x[,1],p$x[,2],labels=rownames(p$x))
如果我们正在制作包含许多观察值的散点图,则标签可能不可读。因此,我们可能只想标记更多的极端值,我们可以用 来识别quantile()
:
#make a new dataframe with the info from p we want to plot
df <- data.frame(PC1=p$x[,1],PC2=p$x[,2],labels=rownames(p$x))
#make sure labels are not factors, so we can easily reassign them
df$labels <- as.character(df$labels)
# use quantile() to identify which ones are within 25-75 percentile on both
# PC and blank their labels out
df[ df$PC1 > quantile(df$PC1)["25%"] &
df$PC1 < quantile(df$PC1)["75%"] &
df$PC2 > quantile(df$PC2)["25%"] &
df$PC2 < quantile(df$PC2)["75%"],]$labels <- ""
# plot
plot(df$PC1,df$PC2)
text(df$PC1,df$PC2,labels=df$labels)