comparison phyloseq_ordinate_plot.R @ 0:ae9cd53b7760 draft

Initial upload
author simon-gladman
date Wed, 05 Sep 2018 02:07:22 -0400
parents
children 52f009b255a1
comparison
equal deleted inserted replaced
-1:000000000000 0:ae9cd53b7760
1 library('getopt')
2 library('ape')
3 suppressPackageStartupMessages(library('phyloseq'))
4 library(biomformat)
5 library(plyr)
6 Sys.setenv("DISPLAY"=":1")
7 library("ggplot2")
8 suppressPackageStartupMessages(library("doParallel"))
9 ncores = ceiling(detectCores() * 0.8)
10 registerDoParallel(cores=ncores)
11
12 options(warn=-1)
13
14 theme_set(theme_bw())
15
16 #http://saml.rilspace.com/creating-a-galaxy-tool-for-r-scripts-that-output-images-and-pdfs
17 #http://joey711.github.io/phyloseq-demo/phyloseq-demo.html
18 option_specification = matrix(c(
19 'otu_table','o',2,'character',
20 'tax_table','t',2,'character',
21 'meta_table','m',2,'character',
22 'biom','b',2,'character',
23 'subset','s',2,'character',
24 'method','n',2,'character',
25 'distance','d',2,'character',
26 'kingdom','k',2,'character',
27 'plottype','e',2,'numeric',
28 'category','g',2,'numeric',
29 'outdir','r',2,'character',
30 'htmlfile','h',2,'character'
31 ),byrow=TRUE,ncol=4);
32
33
34 options <- getopt(option_specification);
35 options(bitmapType="cairo")
36
37 if (!is.null(options$outdir)) {
38 # Create the directory
39 dir.create(options$outdir,FALSE)
40 }
41
42
43
44 method<-options$method
45 ### select a kingdom for phyloseq plot (e.g., "phylum")
46 #kingdom_str<-colnames(tax_table)[options$kingdom]
47 kingdom_str<-options$kingdom
48 distance<-options$distance
49 plottype<-options$plottype
50
51 ### prepare the directory and file name
52 pdffile <- gsub("[ ]+", "", paste(options$outdir,"/pdffile.pdf"))
53 pngfile_nmds <- gsub("[ ]+", "", paste(options$outdir,"/nmds.png"))
54 pngfile_nmds_facet <- gsub("[ ]+", "", paste(options$outdir,"/nmds_facet.png"))
55 htmlfile <- gsub("[ ]+", "", paste(options$htmlfile))
56
57
58 ### This function accepts different two different type of BIOM file format
59 readBIOM<-function(inBiom){
60 tryCatch({
61 phyloseq_obj<-import_biom(inBiom,parallel=TRUE)
62 return(phyloseq_obj)
63 },
64 error=function(e){
65 biom_obj<-read_biom(inBiom)
66
67 otu_matrix = as(biom_data(biom_obj), "matrix")
68 OTU_TABLE = otu_table(otu_matrix, taxa_are_rows=TRUE)
69
70 taxonomy_matrix = as.matrix(observation_metadata(biom_obj), rownames.force=TRUE)
71 TAXONOMY_TABLE = tax_table(taxonomy_matrix)
72
73 metadata.temp<-sample_metadata(biom_obj)
74 METADATA_TABLE<-plyr::ldply(metadata.temp, rbind)
75 rownames(METADATA_TABLE)<-as.character(METADATA_TABLE$.id)
76
77 phyloseq_obj = phyloseq(OTU_TABLE, TAXONOMY_TABLE,sample_data(METADATA_TABLE))
78 return(phyloseq_obj)
79 }
80 )
81 }
82
83
84 create_OTU_PDF<-function(pdf_file,phyloseq_obj,phyloseq_ord,kingdom_str,htmlfile,pngfile_nmds,pngfile_nmds_facet){
85 pdf(pdf_file);
86 p1<-plot_ordination(phyloseq_obj,phyloseq_ord,type="taxa",color="Phylum",title="taxa")
87 print(p1)
88 p2<-plot_ordination(phyloseq_obj,phyloseq_ord,type="taxa",color="Phylum",title="taxa") + facet_wrap(formula(paste('~',kingdom_str)),3)
89 print(p2)
90 garbage<-dev.off();
91
92 #png('nmds.png')
93 bitmap(pngfile_nmds,"png16m")
94 p3<-plot_ordination(phyloseq_obj,phyloseq_ord,type="taxa",color="Phylum",title="taxa")
95 print(p3)
96 garbage<-dev.off()
97
98 #png('nmds_facet.png')
99 bitmap(pngfile_nmds_facet,"png16m")
100 p4<-plot_ordination(phyloseq_obj,phyloseq_ord,type="taxa",color="Phylum",title="taxa") + facet_wrap(formula(paste('~',kingdom_str)),3)
101 print(p4)
102 garbage<-dev.off()
103
104 create_HTML_1(htmlfile)
105 }
106
107 create_SAMPLE_PDF<-function(pdf_file,phyloseq_obj,phyloseq_ord,htmlfile,pngfile_nmds,category_type){
108 pdf(pdf_file);
109 p <- plot_ordination(phyloseq_obj, phyloseq_ord, type="samples", color=category_type)
110 p <- p + geom_point(aes(fill=category_type)) + geom_point(size=5) + ggtitle("samples")
111 print(p)
112 garbage<-dev.off();
113
114 #png('nmds.png')
115 bitmap(pngfile_nmds,"png16m")
116 p1 <- plot_ordination(phyloseq_obj, phyloseq_ord, type="samples", color=category_type)
117 p1 <- p1 + geom_point(aes(fill=category_type)) + geom_point(size=5) + ggtitle("samples")
118 print(p1)
119 garbage<-dev.off();
120
121 create_HTML_2(htmlfile)
122 }
123
124 create_BIPLOT_PDF<-function(pdf_file,phyloseq_obj,phyloseq_ord,kingdom_str,htmlfile,pngfile_nmds,category_type){
125 pdf(pdf_file);
126 print(category_type)
127 p_biplot <- plot_ordination(phyloseq_obj, phyloseq_ord, type="biplot", color=category_type, shape=kingdom_str,title="BIPLOT")
128 print(p_biplot)
129 garbage<-dev.off();
130
131 bitmap(pngfile_nmds,"png16m")
132 p_biplot_png <- plot_ordination(phyloseq_obj, phyloseq_ord, type="biplot", color=category_type, shape=kingdom_str,title="BIPLOT")
133 print(p_biplot_png)
134 garbage<-dev.off();
135
136 create_HTML_2(htmlfile)
137 }
138
139 create_SPLITPLOT_PDF<-function(pdf_file,phyloseq_obj,phyloseq_ord,kingdom_str,htmlfile,pngfile_nmds,category_type){
140 pdf(pdf_file,width=10, height=6);
141 split_plot <- plot_ordination(phyloseq_obj, phyloseq_ord, type="split", color=kingdom_str, shape=kingdom_str, label=category_type, title="SPLIT PLOT")
142 split_plot <- split_plot + theme(plot.margin = unit(c(12,18,12,18),"pt"))
143 print(split_plot)
144 garbage<-dev.off();
145
146 bitmap(pngfile_nmds,"png16m", width=6, height=4, units="in",res=200)
147 split_plot <- plot_ordination(phyloseq_obj, phyloseq_ord, type="split", color=kingdom_str, shape=kingdom_str, label=category_type, title="SPLIT PLOT")
148 split_plot <- split_plot + theme(plot.margin = unit(c(12,18,12,18),"pt"))
149 print(split_plot)
150 garbage<-dev.off();
151 create_HTML_2(htmlfile)
152 }
153
154 create_HTML_1<-function(htmlfile){
155 htmlfile_handle <- file(htmlfile)
156 html_output = c('<html><body>',
157 '<table align="center>',
158 '<tr>',
159 '<td valign="middle" style="vertical-align:middle;">',
160 '<a href="pdffile.pdf"><img src="nmds.png"/></a>',
161 '</td>',
162 '</tr>',
163 '<tr>',
164 '<td valign="middle" style="vertical-align:middle;">',
165 '<a href="pdffile.pdf"><img src="nmds_facet.png"/></a>',
166 '</td>',
167 '</tr>',
168 '</table>',
169 '</html></body>');
170 writeLines(html_output, htmlfile_handle);
171 close(htmlfile_handle);
172 }
173
174 create_HTML_2<-function(htmlfile){
175 htmlfile_handle <- file(htmlfile)
176 html_output = c('<html><body>',
177 '<table align="center>',
178 '<tr>',
179 '<td valign="middle" style="vertical-align:middle;">',
180 '<a href="pdffile.pdf"><img src="nmds.png"/></a>',
181 '</td>',
182 '</tr>',
183 '</table>',
184 '</html></body>');
185 writeLines(html_output, htmlfile_handle);
186 close(htmlfile_handle);
187 }
188
189 if(!is.null(options$biom)){
190
191 #physeq<-import_biom(options$biom)
192 physeq<-readBIOM(options$biom)
193
194 if(length(rank_names(physeq)) == 8){
195 tax_table(physeq) <- tax_table(physeq)[,-1]
196 colnames(tax_table(physeq)) <- c("Kingdom", "Phylum", "Class", "Order", "Family", "Genus", "Species")
197 } else {
198 colnames(tax_table(physeq)) <- c("Kingdom", "Phylum", "Class", "Order", "Family", "Genus", "Species")
199 }
200
201 ### select column name from sample table for nmds plot
202 ## which(colnames(sample_data(biom)) == "vegetation_type_id")
203 #category_type<-colnames(sample_data(physeq))[options$subset]
204 category_type <- options$subset
205
206 ### obtain the unique value in the selected column from sample table
207 category_option<-unique(sample_data(physeq))[,options$subset]
208
209 }else{
210
211 ### read the data into correct data type to create phyloseq object
212 otu_table<-as.matrix(read.table(options$otu_table,header=T,sep="\t"))
213 tax_table<-as.matrix(read.table(options$tax_table,header=T,sep="\t"))
214 sample_table<-read.table(options$meta_table,header=T,sep="\t",stringsAsFactors=F)
215
216
217 ### select column name from sample table for nmds plot
218 category_type<-colnames(sample_table)[options$category]
219
220 ### obtain the unique value in the selected column from sample table
221 category_option<-unique(sample_table[,options$category])
222
223
224 ### create a sample object for phyloseq
225 sample_object<-sample_data(sample_table)
226
227 ### create otu object for phyloseq
228 OTU<-otu_table(otu_table, taxa_are_rows = TRUE)
229
230 ### create tax object for phyloseq
231 TAX<-tax_table(tax_table)
232
233 ### create a phyloseq object
234 physeq = phyloseq(OTU,TAX,sample_object)
235 }
236 # sample_data(physeq_filter)$category_input <- factor(category_input)
237 category_input = get_variable(physeq, category_type) %in% category_option
238 sample_data(physeq)$category_input <- factor(category_input)
239
240 # physeq_ord<-ordinate(physeq_filter,method,distance)
241 physeq_ord<-ordinate(physeq,method,distance)
242
243 if(plottype == 1){
244 #kingdom_str = colnames(tax_table)[2]
245 create_OTU_PDF(pdffile,physeq,physeq_ord,kingdom_str,htmlfile,pngfile_nmds,pngfile_nmds_facet)
246 }else if(plottype == 2){
247 create_SAMPLE_PDF(pdffile,physeq,physeq_ord,htmlfile,pngfile_nmds,category_type)
248 }else if(plottype == 3){
249 create_BIPLOT_PDF(pdffile,physeq,physeq_ord,kingdom_str,htmlfile,pngfile_nmds,category_type)
250 }else{
251 create_SPLITPLOT_PDF(pdffile,physeq,physeq_ord,kingdom_str,htmlfile,pngfile_nmds,category_type)
252 }
253