pcaplot <- function (mat, title = "PCA Plot", col=rownames(mat)) {
#' pca
#'
#' @param mat (matrix/dataframe): mat
#' @param title (character) :
#' @param subtype (dataframe metadata) : rownames correspnond to
#' @param labe (character) : rownames correspnond to
#' @export
#' @return ggplot
col = c(col)
var = mat[apply(mat, 1, var, na.rm = TRUE) != 0, ]
cc.var = var[complete.cases(var), ]
pca_prcomp = prcomp(t(var), center = T, scale = F)
PC1_and_PC2 = data.frame(PC1 = pca_prcomp$x[, 1], PC2 = pca_prcomp$x[,2], type = rownames(pca_prcomp$x))
perc = (pca_prcomp$sdev^2)/sum(pca_prcomp$sdev^2) * 100
labs <- sapply(seq_along(perc), function(i) {
paste("PC ", i, " (", round(perc[i], 2), "%)", sep = "")})
PCsmd = cbind(PC1_and_PC2, col=col)
levs = levels(factor(col))
cols =c("#E41A1C","#377EB8","#4DAF4A","#984EA3","#FF7F00","#FFFF33","#A65628","#F781BF","#999999","#8DD3C7","#FFFFB3",
"#BEBADA","#FB8072","#80B1D3","#FDB462","#B3DE69","#FCCDE5","#D9D9D9","#BC80BD","#CCEBC5","#FFED6F",
"#E41A1C","#377EB8","#4DAF4A","#984EA3","#FF7F00","#FFFF33","#A65628","#F781BF","#999999","#8DD3C7","#FFFFB3",
"#BEBADA","#FB8072","#80B1D3","#FDB462","#B3DE69","#FCCDE5","#D9D9D9","#BC80BD","#CCEBC5","#FFED6F")
p = ggplot(PCsmd,aes_string("PC1", "PC2", col="col")) +
geom_point(size = 1.5) +
geom_text(aes(label = PCsmd$type), vjust = -1, size=2) +
labs(title = title,x = labs[1], y = labs[2]) +
theme(panel.background = element_rect(fill = "white"),
panel.grid.major = element_line(colour = "gray90"),
panel.border = element_rect(colour = "gray90", fill=NA),
plot.title = element_text(hjust = 0.5),
legend.text = element_text(size = 4), legend.position = "right") +
scale_colour_manual(values =cols[1:length(levs)]) +
xlim(-20,20) +ylim(-9,9)
return(p)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.