前面一個帖子我們學習了畫基本的PCA圖形呀舔,但是是二維的好乐,今天我們學習繪制三維的止潘,因為在有些paper中看到作者放的是三維的,其實也挺好看的矫限。主成分的計算方法上一個帖子講過了,就不多講了。
計算過主成分后叼风,自己提取一下前面3個PC就成了取董。這個是我們今天的測試數(shù)據(jù)。
其實繪制3維圖形的包也很多无宿,我們先測試一個R里面經(jīng)常用的scatter3D茵汰。
先繪制基本的三維PCA圖。
scatter3D(x = plot.data$DC_1, y = plot.data$DC_3, z = plot.data$DC_2,
? ? ? ? ? xlab = "DC_1",? #設(shè)置x,y,z坐標軸的名稱
? ? ? ? ? ylab = "DC_3",
? ? ? ? ? zlab = "DC_2",
? ? ? ? ? pch=21, #當pch取0~14時孽鸡,其點為空心點蹂午,可以用col(顏色)參數(shù)設(shè)置其邊框的顏色;當pch取15~20時彬碱,其點是實心點豆胸,可以用col參數(shù)設(shè)置其填充的顏色;當pch取21~25時堡妒,其點也是實心點配乱,既可以用col參數(shù)設(shè)置邊框的顏色,也可以用bg參數(shù)設(shè)置其內(nèi)部的填充顏色皮迟。
? ? ? ? ? cex=1.5, #大小
? ? ? ? ? col = "white", #設(shè)置點邊框的顏色
? ? ? ? ? bg = plot.data$color #設(shè)置點的填充色
? ? ? ? )
我們下面調(diào)整一些詳細的參數(shù)來控制細節(jié)搬泥。
scatter3D(x = plot.data$DC_1, y = plot.data$DC_3, z = plot.data$DC_2,
? ? ? ? ? xlab = "DC_1",? #設(shè)置x,y,z坐標軸的名稱
? ? ? ? ? ylab = "DC_3",
? ? ? ? ? zlab = "DC_2",
? ? ? ? ? pch=21,#當pch取0~14時,其點為空心點伏尼,可以用col(顏色)參數(shù)設(shè)置其邊框的顏色忿檩;當pch取15~20時,其點是實心點爆阶,可以用col參數(shù)設(shè)置其填充的顏色燥透;當pch取21~25時,其點也是實心點辨图,既可以用col參數(shù)設(shè)置邊框的顏色班套,也可以用bg參數(shù)設(shè)置其內(nèi)部的填充顏色。
? ? ? ? ? cex=2, #大小
? ? ? ? ? col = "white", #設(shè)置點邊框的顏色
? ? ? ? ? bg = plot.data$color, #設(shè)置點的填充色
? ? ? ? ? bty = "f", #控制繪制框的外型故河,可以為“b”, “b2”, “f”, “g”, “bl”, “bl2”, “u”, “n”其中的一個
? ? ? ? ? ticktype = "detailed", #顯示坐標軸的刻度
? ? ? ? ? theta = -20, #旋轉(zhuǎn)角度
? ? ? ? ? phi=0, #控制三維圖的上下方向
? ? ? ? ? d=3, #透視轉(zhuǎn)換強度
? ? ? ? ? cex.axis = 1.2, cex.lab = 2? ?#調(diào)控坐標軸刻度以及文字的大小?
? ? ? ? )
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的鱼的,可以查看幫助發(fā)現(xiàn)只有5個函數(shù)分別為:axes_3D 繪制3D坐標軸理盆,axis_labs_3D 標記坐標刻度,labs_3D標記坐標標簽凑阶,stat_3D 繪制幾何對象猿规,stat_wireframe繪制3D線框或3D曲面。
可以使用labs_3D添加軸標題宙橱。使用hjust姨俩,vjust和angle來實現(xiàn)良好的定位蘸拔。
可以使用axis_labs_3D添加軸標簽。標簽顯示每個軸的最小值和最大值环葵。同樣都伪,可以使用hjust,vjust和angle來實現(xiàn)良好的定位积担。
#theta控制旋轉(zhuǎn)陨晶,phi控制圖的傾斜
theta <- -20 #方位角的度數(shù)
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, #控制旋轉(zhuǎn)角度
? ? ? ? ? ? ? scale.y = 0.7,
? ? ? ? ? ? ? grid=T,? #是否畫網(wǎng)格線
? ? ? ? ? ? ? cex.symbols = 1.5, #點的大小
? ? ? ? ? ? ? col.axis = "#444444",col.grid = "#CCCCCC",col.lab="black" #axis/grid/axis labels的顏色
)