## install pophelper package #install.packages("devtools") #devtools::install_github('royfrancis/pophelper') # load packages library(pophelper) # set working directory setwd("/to/work/directory") # avoid to output scientific notation options(scipen=100) ## make a folder called "original" and put all admixture *.Q results into it # list all files in original folder file_list_admix <- list.files("original/", pattern = ".Q$", full.names = T) # exclude K = 1 file_list_admix <- grep(file_list_admix, pattern='\\.1\\.Q$', inv=T, value=T) # put all grouping information to a tsv file called "group.xls", file format is like following # 1st column is the fixed orders of each sample # 2nd and 3rd column are sample ids, the order of sample MUST BE the same as those in *.Q files # 4th column is the group names which samples belong to #order id1 id2 group #110 1 1 Pop8 #119 10 10 Pop8 # read group.xls file info <- read.table("group.xls", header = T, stringsAsFactors = F, row.names = 3, comment.char = "") # read *.Q into a list qlist_admix <- readQ(file_list_admix) # reorder samples in *.Q files according to 1st column and put them in a new list qlist_admix1 <- list() for(i in 1:length(qlist_admix)){ tmpdf <- qlist_admix[[i]] row.names(tmpdf) <- row.names(info) tmpnew <- cbind(info, tmpdf) tmpnew <- tmpnew[order(tmpnew$order),] qlist_admix1[[i]] <- tmpnew[,5:ncol(tmpnew)] row.names(qlist_admix1[[i]]) <- row.names(tmpnew) write.table(qlist_admix1[[i]], file = paste0("snp", ".K", ncol(qlist_admix[[i]]), ".qmatrix.xls"), row.names = T, col.names = NA, sep = "\t", quote = F) } qlist_admix <- qlist_admix1 # reorder Ks to avoid 1 10 11 ... 2 ... k_order <- vector() mink <- 2 maxk <- 10 if(maxk < 10){ k_order <- 1:length(qlist_admix) } else if (maxk < 20) { end1 <- maxk - 10 + 1 start2 <- end1 + 1 k_order <- c(start2:length(qlist_admix), 1:end1) } # create K labels (2 3 4 ... maxK) klab <- vector() if(mink == 1){ klab <- 1:maxk } else { klab <- mink:maxk } # rename Ks in list using K labels names(qlist_admix) <- klab print(length(qlist_admix)) print(klab) ## plot join plot prefix <- "snp.admix" height <- 2 width <- 18 plotQ(qlist_admix[k_order], imgoutput="join",showindlab=T, showlegend=F, sortind = NA, indlabsize=2.5,indlabheight=0,indlabspacer=0.05,barbordersize=NA, outputfilename=prefix,imgtype="pdf", sharedindlab = F, useindlab = T, showyaxis = T, basesize = 10, sppos = "right", showticks = T, splab = paste0("K = ", klab), splabsize = 6, splabface = "bold", width = width, height = height, panelspacer = 0.02, dpi = 600, barbordercolour = NA) plotQ(qlist_admix[k_order], imgoutput="join",showindlab=T, showlegend=F, sortind = NA, indlabsize=2.5,indlabheight=0,indlabspacer=0.05,barbordersize=NA, outputfilename=prefix,imgtype="png", sharedindlab = F, useindlab = T, showyaxis = T, basesize = 10, sppos = "right", showticks = T, splab = paste0("K = ", klab), splabsize = 6, splabface = "bold", width = width, height = height, panelspacer = 0.02, dpi = 600, barbordercolour = NA) ## plot seperated plot (per K per file) names(qlist_admix) <- paste0("admix.K", klab) prefix_sep <- paste0("snp.K", klab) plotQ(qlist_admix[k_order], imgoutput="sep",showindlab=T, showlegend=F, sortind = NA, indlabsize=2.5,indlabheight=0,indlabspacer=0.05,barbordersize=NA, indlabhjust = 0, outputfilename=prefix_sep,imgtype="pdf", sharedindlab = F, splab = paste0("K = ", klab), useindlab = T, showyaxis = T, basesize = 10, sppos = "right", showticks = T, splabsize = 4, splabface = "bold", width = width, height = height * 1.5, panelspacer = 0.02, dpi = 600, barbordercolour = NA) plotQ(qlist_admix[k_order], imgoutput="sep",showindlab=T, showlegend=F, sortind = NA, indlabsize=2.5,indlabheight=0,indlabspacer=0.05,barbordersize=NA, indlabhjust = 0, outputfilename=prefix_sep,imgtype="png", sharedindlab = F, splab = paste0("K = ", klab), useindlab = T, showyaxis = T, basesize = 10, sppos = "right", showticks = T, splabsize = 4, splabface = "bold", width = width, height = height * 1.5, panelspacer = 0.02, dpi = 600, barbordercolour = NA)