解析をしている時に、PCAだけでは情報が足りず、UMAPを使ってクラスターの状況を理解しようとすると思いますが、個人的には3D PCA plotがわかりやすいのではないかと思い、好きです。
しかし、3D PCA plotをRで記載しようとしても、出て来ないのですよね。。
特に、データがSeurat objectでrunPCAしたものを、そのまま3D plotしているのが、見つからず自分で作成しました。
3D plot differenciated by clster
library(plotly)
library(stats)
pca_3d <- Embeddings(object = your.data[["pca"]])
pca_3d <- pca_3d[,1:3]
cluster <- as.character(Idents(your.data))
pca_3d <- cbind(pca_3d, cluster )
pca_3d <- as.data.frame(pca_3d)
plot_ly(pca_3d, x = ~PC_1, y = ~PC_2, z = ~PC_3, color = ~pca_3d$cluster, colors = c('#636EFA','#EF553B','#00CC96')) %>% add_markers(size = 12)
3D plot differenciated by orig.ident
pca_3d <- Embeddings(object = your.data[["pca"]])
pca_3d <- pca_3d[,1:3]
cluster <- as.character(your.data@meta.data$orig.ident)
pca_3d <- cbind(pca_3d, cluster )
pca_3d <- as.data.frame(pca_3d)
plot_ly(pca_3d, x = ~PC_1, y = ~PC_2, z = ~PC_3, color = ~pca_3d$cluster, colors = c('#636EFA','#EF553B','#00CC96') ) %>%
add_markers(size = 12)
your.dataを自分のSeurat Object(PCA済のもの)の名前に書き換えるだけで使えます。
コードの中身
1行目 PCAのデータを抽出する
2行目 PCA1~3までを抽出する
3行目 何でplotのカラー分けをするか指定する。(cluster解析でわかれたclusterで色分けするか、元々のデータのサンプル毎で分けるか)
4行目 PCA1~3とその属性(clusterやbatch)をマージさせる
5行目 data.frameに変換
6行目 3D plot;x, y, z軸の指定。色分けの指定
これで私は動きました。
これからは有益な解析のためのcodeも紹介していきたいと思います。