#plot a dot per __row__ in table args <- commandArgs(trailingOnly = TRUE) intab <- args[1] data=read.table(intab, sep="\t", row.names=1, header=TRUE) #remove any constant columns (at least 1 value must be different data=data[,apply(data, 2, var, na.rm=TRUE) != 0] pca=prcomp(data, scale=TRUE) library(ggplot2) scores=data.frame(pca$x) cols=ncol(scores) cells=gsub("_.*", "", rownames(scores)) library(ggplot2) scores=data.frame(scores,cells) colnames(scores)[cols+1]="cell" #palette Set1 when 9 or less, Paired for up to 12 ggplot(scores, aes(x=PC1, y=PC2))+geom_point(aes(color=cell), size=6)+geom_text(aes(label=rownames(scores), hjust=-.2), size=3)+scale_colour_brewer(palette="Set1") ggplot(scores, aes(x=PC2, y=PC3))+geom_point(aes(color=cell), size=6)+geom_text(aes(label=rownames(scores), hjust=-.2), size=3)+scale_colour_brewer(palette="Set1") ggplot(scores, aes(x=PC3, y=PC4))+geom_point(aes(color=cell), size=6)+geom_text(aes(label=rownames(scores), hjust=-.2), size=3)+scale_colour_brewer(palette="Set1") #variance plot #http://strata.uga.edu/6370/lecturenotes/principalComponents.html sd=pca$sdev var=sd^2 var.percent=var/sum(var) * 100 barplot(var.percent, xlab="PC", ylab="Percent Variance", names.arg=1:length(var.percent), las=1, ylim=c(0,max(var.percent)), col="blue") abline(h=1/ncol(pca)*100, col="red")