Mercurial > repos > devteam > draw_stacked_barplots
comparison draw_stacked_barplots.pl @ 0:063ecbe59faf draft
Uploaded tool tarball.
| author | devteam |
|---|---|
| date | Wed, 25 Sep 2013 10:29:15 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:063ecbe59faf |
|---|---|
| 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); |
