Entering edit mode
4.0 years ago
NBR
•
0
Very curious how I can modify my code below (which I got from this forum :) ), such that I can get the loadings biplot also shown on this PCA plot? This is a modificed DESeq2 PCA plot of PC2 and PC3 at the moment, but would like this biplot so I can visualise the loadings overlayed on the PCA. I've tried modifying it with loadings = TRUE, but that didn't work. Thank you!
plotPCA.san <- function (object, intgroup = "condition", ntop = 500, returnData = FALSE)
{
rv <- rowVars(assay(object))
select <- order(rv, decreasing = TRUE)[seq_len(min(ntop,
length(rv)))]
pca <- prcomp(t(assay(object)[select, ]))
percentVar <- pca$sdev^2/sum(pca$sdev^2)
if (!all(intgroup %in% names(colData(object)))) {
stop("the argument 'intgroup' should specify columns of colData(dds)")
}
intgroup.df <- as.data.frame(colData(object)[, intgroup, drop = FALSE])
group <- if (length(intgroup) > 1) {
factor(apply(intgroup.df, 1, paste, collapse = " : "))
}
else {
colData(object)[[intgroup]]
}
d <- data.frame(PC2 = pca$x[, 2], PC3 = pca$x[, 3], group = group,
intgroup.df, name = colData(rl)[,1])
if (returnData) {
attr(d, "percentVar") <- percentVar[2:3]
return(d)
}
ggplot(data = d, aes_string(x = "PC2", y = "PC3", color = "group", label = "name")) + geom_point(size = 3) + xlab(paste0("PC2: ", round(percentVar[2] * 100), "% variance")) + ylab(paste0("PC3: ", round(percentVar[3] * 100), "% variance")) + coord_fixed()
}
then
pdf("PCA.pdf")
plotPCA.san(rl, intgroup = 'sample', ntop = nrow(counts(cds)))
dev.off()