【R画图学习8.2】PCA图-3D

作者: jjjscuedu | 来源:发表于2022-10-21 18:38 被阅读0次

    前面一个帖子我们学习了画基本的PCA图形,但是是二维的,今天我们学习绘制三维的,因为在有些paper中看到作者放的是三维的,其实也挺好看的。主成分的计算方法上一个帖子讲过了,就不多讲了。

    计算过主成分后,自己提取一下前面3个PC就成了。这个是我们今天的测试数据。

    其实绘制3维图形的包也很多,我们先测试一个R里面经常用的scatter3D。

    先绘制基本的三维PCA图。

    scatter3D(x = plot.data$DC_1, y = plot.data$DC_3, z = plot.data$DC_2,

              xlab = "DC_1",  #设置x,y,z坐标轴的名称

              ylab = "DC_3",

              zlab = "DC_2",

              pch=21, #当pch取0~14时,其点为空心点,可以用col(颜色)参数设置其边框的颜色;当pch取15~20时,其点是实心点,可以用col参数设置其填充的颜色;当pch取21~25时,其点也是实心点,既可以用col参数设置边框的颜色,也可以用bg参数设置其内部的填充颜色。

              cex=1.5, #大小

              col = "white", #设置点边框的颜色

              bg = plot.data$color #设置点的填充色

            )

    我们下面调整一些详细的参数来控制细节。

    scatter3D(x = plot.data$DC_1, y = plot.data$DC_3, z = plot.data$DC_2,

              xlab = "DC_1",  #设置x,y,z坐标轴的名称

              ylab = "DC_3",

              zlab = "DC_2",

              pch=21,#当pch取0~14时,其点为空心点,可以用col(颜色)参数设置其边框的颜色;当pch取15~20时,其点是实心点,可以用col参数设置其填充的颜色;当pch取21~25时,其点也是实心点,既可以用col参数设置边框的颜色,也可以用bg参数设置其内部的填充颜色。

              cex=2, #大小

              col = "white", #设置点边框的颜色

              bg = plot.data$color, #设置点的填充色

              bty = "f", #控制绘制框的外型,可以为“b”, “b2”, “f”, “g”, “bl”, “bl2”, “u”, “n”其中的一个

              ticktype = "detailed", #显示坐标轴的刻度

              theta = -20, #旋转角度

              phi=0, #控制三维图的上下方向

              d=3, #透视转换强度

              cex.axis = 1.2, cex.lab = 2   #调控坐标轴刻度以及文字的大小 

            )

    legend(x=0.6,y=0.2,title =  "Group",legend=paste("G",c(1:10),sep=""),pch=21,cex=2,y.intersp=1,pt.bg = unique(plot.data$color),bg="white",bty="n")

    下面我们再来测试2个可以画3维PCA的其它包。

    install.packages('devtools')

    devtools::install_github("AckerDWM/gg3D")

    library(gg3D)

    安装好gg3D包后,其实这个包是基于ggplot的,可以查看帮助发现只有5个函数分别为:axes_3D 绘制3D坐标轴,axis_labs_3D 标记坐标刻度,labs_3D标记坐标标签,stat_3D 绘制几何对象,stat_wireframe绘制3D线框或3D曲面。

    可以使用labs_3D添加轴标题。使用hjust,vjust和angle来实现良好的定位。

    可以使用axis_labs_3D添加轴标签。标签显示每个轴的最小值和最大值。同样,可以使用hjust,vjust和angle来实现良好的定位。

    #theta控制旋转,phi控制图的倾斜

    theta <- -20 #方位角的度数

    phi <- 0 # 渐近线

    colors <- unique(plot.data$color)

    names(colors) <- colors

    ggplot(plot.data, aes(x = DC_1, y = DC_3, z = DC_2, color = color)) +

      axes_3D(theta=theta, phi=phi) +

      stat_3D(theta=theta, phi=phi) +

      labs_3D(theta=theta,

              phi=phi,

              hjust=c(1,1,0),

              vjust=c(1.5,1,-.2),

              labs=c("DC_1", "DC_2", "DC_3")) +

      scale_color_manual(values = colors,labels=unique(plot.data$Group))+

      theme_void()+

      theme(text = element_text(size = 20))

    当然还有其它的包,例如scatterplot3d:

    scatterplot3d(x = plot.data$DC_1,

                  y = plot.data$DC_3,

                  z = plot.data$DC_2,

                  #color = plot.data$color,

                  xlab = "DC_1", ylab = "DC_3", zlab = "DC_2",

                  pch = 21,  #点的类型

                  bg=plot.data$color, #对于pch 21-25 点的填充色

                  angle = 120, #控制旋转角度

                  scale.y = 0.7,

                  grid=T,  #是否画网格线

                  cex.symbols = 1.5, #点的大小

                  col.axis = "#444444",col.grid = "#CCCCCC",col.lab="black" #axis/grid/axis labels的颜色

    )

    相关文章

      网友评论

        本文标题:【R画图学习8.2】PCA图-3D

        本文链接:https://www.haomeiwen.com/subject/ekvvzrtx.html