使用自动绘图 (ggfortify) 显示非默认主成分
Show non-default principal components using autoplot (ggfortify)
我想使用包 ggfortify
的函数 autoplot()
绘制 PC2 与 PC3 的对比图。默认情况下只显示 PC1 和 PC2:
library(ggfortify)
myPCA <- prcomp(iris[-5])
autoplot(myPCA)
我可以通过重新排序和重命名 prcomp 对象中的列来获得我想要的内容:
myPCAtrunc <- myPCA
myPCAtrunc[[1]] <- myPCAtrunc[[1]][c(2,3,1,4)]
myPCAtrunc[[2]] <- myPCAtrunc[[2]][,c(2,3,1,4)]
colnames(myPCAtrunc[[2]]) <- c("PC1","PC2","PC3","PC4") # fake names
myPCAtrunc[[5]] <- myPCAtrunc[[5]][,c(2,3,1,4)]
colnames(myPCAtrunc[[5]]) <- c("PC1","PC2","PC3","PC4") # fake names
autoplot(myPCAtrunc, xlab = "PC2", ylab="PC3")
我知道它是正确的,因为它和plot(myPCA$x[, c(2,3)])
一样。
但必须有更简洁的方法来解决它。一些想法?
在查看调用的方法时,它似乎设计为仅绘制 PC1 和 PC2:
getS3method("autoplot", class(myPCA) )
> ...
> if (is_derived_from(object, "prcomp")) {
> x.column <- "PC1"
> y.column <- "PC2"
> loadings.column <- "rotation"
> }
> ...
如果这是您的选择,我建议您使用 ggbiplot
包并设置 choices
参数:
library(ggbiplot)
ggbiplot(myPCA, choices = 2:3 , var.axes =FALSE)
您只能修改您的 prcomp 对象。然后像这样更改 y 标签:
pca_test=pca
pca_test$x=pca_test$x[,c(1,3)]
colnames(pca_test$x)=c("PC1","PC2")
pca_test$rotation=pca_test$rotation[,c(1,3)]
colnames(pca_test$rotation)=c("PC1","PC2")
autoplot(pca_test,data=df,colour='study',shape='species')+scale_color_manual(values=c("Red","Blue","Green","Purple","Brown","Orange","Black"))+scale_fill_manual(values=c("Red","Blue","Green","Purple","Brown","Orange","Black"))+theme_bw()+ylab("PC3")
希望对您有所帮助!
JC
此问题最近已解决 (here)。
autoplot(myPCA, # your prcomp object
x = 2, # PC2
y = 3) # PC3
我想使用包 ggfortify
的函数 autoplot()
绘制 PC2 与 PC3 的对比图。默认情况下只显示 PC1 和 PC2:
library(ggfortify)
myPCA <- prcomp(iris[-5])
autoplot(myPCA)
我可以通过重新排序和重命名 prcomp 对象中的列来获得我想要的内容:
myPCAtrunc <- myPCA
myPCAtrunc[[1]] <- myPCAtrunc[[1]][c(2,3,1,4)]
myPCAtrunc[[2]] <- myPCAtrunc[[2]][,c(2,3,1,4)]
colnames(myPCAtrunc[[2]]) <- c("PC1","PC2","PC3","PC4") # fake names
myPCAtrunc[[5]] <- myPCAtrunc[[5]][,c(2,3,1,4)]
colnames(myPCAtrunc[[5]]) <- c("PC1","PC2","PC3","PC4") # fake names
autoplot(myPCAtrunc, xlab = "PC2", ylab="PC3")
我知道它是正确的,因为它和plot(myPCA$x[, c(2,3)])
一样。
但必须有更简洁的方法来解决它。一些想法?
在查看调用的方法时,它似乎设计为仅绘制 PC1 和 PC2:
getS3method("autoplot", class(myPCA) )
> ...
> if (is_derived_from(object, "prcomp")) {
> x.column <- "PC1"
> y.column <- "PC2"
> loadings.column <- "rotation"
> }
> ...
如果这是您的选择,我建议您使用 ggbiplot
包并设置 choices
参数:
library(ggbiplot)
ggbiplot(myPCA, choices = 2:3 , var.axes =FALSE)
您只能修改您的 prcomp 对象。然后像这样更改 y 标签:
pca_test=pca
pca_test$x=pca_test$x[,c(1,3)]
colnames(pca_test$x)=c("PC1","PC2")
pca_test$rotation=pca_test$rotation[,c(1,3)]
colnames(pca_test$rotation)=c("PC1","PC2")
autoplot(pca_test,data=df,colour='study',shape='species')+scale_color_manual(values=c("Red","Blue","Green","Purple","Brown","Orange","Black"))+scale_fill_manual(values=c("Red","Blue","Green","Purple","Brown","Orange","Black"))+theme_bw()+ylab("PC3")
希望对您有所帮助!
JC
此问题最近已解决 (here)。
autoplot(myPCA, # your prcomp object
x = 2, # PC2
y = 3) # PC3