代码之家  ›  专栏  ›  技术社区  ›  Ammar Sabir Cheema

使用带标记点的kmean创建三维PCA

pca r
  •  0
  • Ammar Sabir Cheema  · 技术社区  · 6 年前

    我想在 mtcars dataset

    为此,我尝试了下面给出的代码

    require(rgl)
    需要(SciView)
    需要(plotrix)
    库(corrplot)
    需要(ggplot2)
    要求(重塑)
    需要(“GridExtra”)
    cars.pca<-pcomp(~mpg+cyl+disp+hp+drat+wt+qsec,data=mtcars),subset=-(8:14)
    mtcars_pca=cbind(cbind(mtcars,cars.pca$scores),car=rowname(mtcars))。
    绘图(cars.pca,其中=“相关性”)
    绘图(cars.pca,其中=“分数”,cex=0.8)
    < /代码> 
    
    

    代码在这里工作正常,并生成两个图,如下所示:

    使用下面给出的代码进行绘图,但绘图中存在问题:

    k<-kmeans(mtcars,5,start=25,iter.max=1000)
    新=cbind(mtcars_pca,cluster=k$cluster)
    with(new,plot3d(pc1,pc2,pc3,col=k$cluster,size=2,type='s'))
    car==行名称(mtcars)
    带(新,text3d(pc1,pc2,pc3,car))
    < /代码> 
    
    

    比例不正确,如图中所示重叠,PC1的比例已移到上方,同样PC2和PC3重叠,如何消除这些问题,使PC1、PC2和PC3的比例打印在正确的位置?.

    为此我尝试了给出的代码here如下:

    require(rgl)
    require(SciViews)
    require(plotrix)
    library(corrplot)
    require(ggplot2)
    require(reshape)
    require("gridExtra")
    cars.pca <- pcomp(~mpg+cyl+disp+hp+drat+wt+qsec, data = mtcars)#,  subset = -(8:14))
    mtcars_pca = cbind(cbind(mtcars, cars.pca$scores), car = rownames(mtcars))
    plot(cars.pca, which = "correlations") 
    plot(cars.pca, which = "scores", cex = 0.8) 
    

    代码在这里工作正常,并生成两个图,如下所示: plot1 plot2

    使用下面给出的代码进行绘图,但绘图中存在问题:

    k <- kmeans(mtcars, 5, nstart=25, iter.max=1000)
    new = cbind(mtcars_pca,cluster = k$cluster)
    with(new,plot3d(PC1,PC2,PC3, col=k$cluster, size=2, type='s'))
    car= = rownames(mtcars)
    with(new,text3d(PC1,PC2,PC3,car))
    

    plot4

    比例不正确,如图中所示重叠,PC1的比例已移到上方,同样PC2和PC3重叠,如何消除这些问题,使PC1、PC2和PC3的比例打印在正确的位置?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sandipan Dey    6 年前

    可能是您想使用参数 aspect>, adjust , cex 或use jitter 来查找最小化文本重叠的值:

    with(new,plot3d(pc1,pc2,pc3,col=k$cluster,size=2,type='s',aspect=c(3,1,3)))
    car=行名称(mtcars)
    使用(new,text3d(抖动(pc1),抖动(pc2),抖动(pc3),car,cex=0.7,adjust=c(0.5,0.9)))
    < /代码> 
    
    

    动画文本重叠:

    with(new,plot3d(PC1,PC2,PC3, col=k$cluster, size=2, type='s', aspect=c(3,1,3)))
    car= rownames(mtcars)
    with(new,text3d(jitter(PC1),jitter(PC2),jitter(PC3),car,cex=0.7, adjust=c(0.5,0.9)))
    

    enter image description here