Mercurial > repos > xuebing > sharplabtool
comparison tools/regVariation/draw_stacked_barplots.pl @ 0:9071e359b9a3
Uploaded
author | xuebing |
---|---|
date | Fri, 09 Mar 2012 19:37:19 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:9071e359b9a3 |
---|---|
1 #!/usr/bin/perl -w | |
2 | |
3 # This program draws, in a pdf file, a stacked bars plot for different categories of data and for | |
4 # different criteria. For each criterion a stacked bar is drawn, such that the height of each stacked | |
5 # sub-bar represents the number of elements in each category satisfying that criterion. | |
6 # The input consists of a TABULAR format file, where the left column represents the names of categories | |
7 # and the other columns are headed by the names of criteria, such that each data value in the file | |
8 # represents the number of elements in a certain category satisfying a certain criterion. | |
9 # The output is a PDF file containing a stacked bars plot representing the number of elements in each | |
10 # category satisfying each criterion. The drawing is done using R code. | |
11 | |
12 | |
13 use strict; | |
14 use warnings; | |
15 | |
16 my $criterion; | |
17 my @criteriaArray = (); | |
18 my $criteriaNumber = 0; | |
19 my $lineCounter = 0; | |
20 | |
21 #variable to store the names of R script file | |
22 my $r_script; | |
23 | |
24 # check to make sure having correct files | |
25 my $usage = "usage: draw_stacked_bar_plot.pl [TABULAR.in] [PDF.out] \n"; | |
26 die $usage unless @ARGV == 2; | |
27 | |
28 my $categoriesInputFile = $ARGV[0]; | |
29 | |
30 my $categories_criteria_bars_plot_outputFile = $ARGV[1]; | |
31 | |
32 #open the input file | |
33 open (INPUT, "<", $categoriesInputFile) || die("Could not open file $categoriesInputFile \n"); | |
34 open (OUTPUT, ">", $categories_criteria_bars_plot_outputFile) || die("Could not open file $categories_criteria_bars_plot_outputFile \n"); | |
35 | |
36 # R script to implement the drawing of a stacked bar plot representing thes significant motifs in each category of motifs | |
37 #construct an R script file | |
38 $r_script = "motif_significance_bar_plot.r"; | |
39 open(Rcmd,">", $r_script) or die "Cannot open $r_script \n\n"; | |
40 print Rcmd " | |
41 #store the table content of the first file into a matrix | |
42 categoriesTable <- read.table(\"$categoriesInputFile\", header = TRUE); | |
43 categoriesMatrix <- as.matrix(categoriesTable); | |
44 | |
45 | |
46 #compute the sum of elements in the column with the maximum sum in each matrix | |
47 columnSumsVector <- colSums(categoriesMatrix); | |
48 maxColumn <- max (columnSumsVector); | |
49 | |
50 if (maxColumn %% 10 != 0){ | |
51 maxColumn <- maxColumn + 10; | |
52 } | |
53 | |
54 plotHeight = maxColumn/8; | |
55 criteriaVector <- names(categoriesTable); | |
56 | |
57 pdf(file = \"$categories_criteria_bars_plot_outputFile\", width = length(criteriaVector), height = plotHeight, family = \"Times\", pointsize = 12, onefile = TRUE); | |
58 | |
59 | |
60 | |
61 #draw the first barplot | |
62 barplot(categoriesMatrix, ylab = \"No. of elements in each category\", xlab = \"Criteria\", ylim = range(0, maxColumn), col = \"black\", density = c(10, 20, 30, 40, 50, 60, 70, 80), angle = c(45, 90, 135), names.arg = criteriaVector); | |
63 | |
64 #draw the legend | |
65 legendX = 0.2; | |
66 legendY = maxColumn; | |
67 | |
68 legend (legendX, legendY, legend = rownames(categoriesMatrix), density = c(10, 20, 30, 40, 50, 60, 70, 80), angle = c(45, 90, 135)); | |
69 | |
70 dev.off(); | |
71 | |
72 #eof\n"; | |
73 close Rcmd; | |
74 system("R --no-restore --no-save --no-readline < $r_script > $r_script.out"); | |
75 | |
76 #close the input files | |
77 close(OUTPUT); | |
78 close(INPUT); |