0
|
1 package Rcall;
|
|
2
|
|
3 use strict;
|
|
4 use warnings;
|
|
5 use Statistics::R;
|
|
6
|
|
7 use Exporter;
|
|
8 our @ISA = qw(Exporter);
|
|
9 our @EXPORT_OK = qw( &histogram &pie_chart &bg_to_png );
|
|
10
|
|
11 sub histogram
|
|
12 {
|
|
13 my ($size_hashR, $out_png, $size) = @_;
|
|
14 my (@abs, @ord);
|
|
15 my $i = 0;
|
|
16 foreach my $k (sort {$a <=> $b} keys %{$size_hashR})
|
|
17 {
|
|
18 my $percentage = $size_hashR->{$k} * 100 / $size;
|
|
19 $abs[$i] = $k ; $ord[$i] = $percentage; $i++;
|
|
20 }
|
|
21 my $abs = join (",", @abs );
|
|
22 my $ord = join (",", @ord );
|
|
23 if (scalar(@abs) != 0)
|
|
24 {
|
|
25
|
|
26 my $R = Statistics::R->new();
|
|
27 $R->startR;
|
|
28 $R->send(
|
|
29 qq`library(ggplot2)
|
|
30 percentage = c($ord)
|
|
31 size =c($abs)
|
|
32 min = min(size)
|
|
33 max = max(size)
|
|
34 dat = data.frame(size,percentage)
|
|
35 png(filename=\"$out_png\", width = 800, height = 480)
|
|
36 c = ggplot(dat,aes(size,percentage))
|
|
37 c + geom_bar(stat="identity") + scale_x_continuous(breaks=min:max)+theme( axis.text.x = element_text(angle=90, hjust=0.5, size=20), axis.text.y = element_text( size=20 ), axis.title.x = element_text( size=25, face="bold"), axis.title.y = element_text( size=25, face="bold") )
|
|
38 dev.off()`);
|
|
39 $R->stopR();
|
|
40
|
|
41 }
|
|
42 }
|
|
43
|
|
44 sub bg_to_png
|
|
45 {
|
|
46 my ( $fai, $bgP, $bgM, $dir, $sb ) = @_;
|
|
47 my $R = Statistics::R->new();
|
|
48 $R->startR;
|
|
49 $R->send(
|
|
50 qq`library('Sushi')
|
|
51 fai =read.table("$fai")
|
11
|
52 if ( file.info("$bgP")\$size !=0 )
|
|
53 {
|
|
54 bgP = read.table("$bgP")
|
|
55 } else { bgP = data.frame(factor(),integer()) }
|
|
56
|
|
57 if ( file.info("$bgM")\$size !=0 )
|
|
58 {
|
|
59 bgM = read.table("$bgM")
|
|
60 } else { bgM = data.frame(factor(),integer()) }
|
|
61
|
|
62 f_both = function(chr,end) {
|
0
|
63 jpeg( paste0("$dir",as.character(chr),".png"), quality=100)
|
|
64 par(mfrow=c(2,1),mar=c(1,10,1,3))
|
|
65 plotBedgraph(bgP, chrom=chr,chromstart=0,chromend=end,transparency=.50, color=SushiColors(2)(2)[1])
|
|
66 axis(side=2,las=2,tcl=.2)
|
|
67 mtext("Scaled Read Depth",side=2,line=4,cex=1,font=2)
|
|
68 plotBedgraph(bgM, chrom=chr,chromstart=0,chromend=end,transparency=.50, flip=TRUE, color=SushiColors(2)(2)[2])
|
|
69 labelgenome(chrom=chr,chromstart=0,chromend=end,side=3,n=3,scale="$sb", line=0, chromline = 0.5, scaleline = 0.5, scaleadjust =1.05, chromadjust = -0.4)
|
|
70 axis(side=2,las=2,tcl=.2,at=pretty(par("yaxp")[c(1,2)]),labels=-1*pretty(par("yaxp")[c(1,2)]))
|
|
71 mtext("Scaled Read Depth",side=2,line=4.5,cex=1,font=2)
|
|
72 dev.off()
|
|
73 }
|
11
|
74
|
|
75 f_plus = function(chr,end) {
|
|
76 jpeg( paste0("$dir",as.character(chr),".png"), quality=100)
|
|
77 plotBedgraph(bgP, chrom=chr,chromstart=0,chromend=end,transparency=.50, color=SushiColors(2)(2)[1])
|
|
78 labelgenome(chrom=chr,chromstart=0,chromend=end,n=3,scale="$sb", line=0, chromline = 0.5, scaleline = 0.5, scaleadjust =1.05, chromadjust = -0.4)
|
|
79 axis(side=2,las=2,tcl=.2)
|
|
80 mtext("Scaled Read Depth",side=2,line=4,cex=1,font=2)
|
|
81 dev.off()
|
|
82 }
|
|
83
|
|
84 f_minus = function(chr,end) {
|
|
85 jpeg( paste0("$dir",as.character(chr),".png"), quality=100)
|
|
86 plotBedgraph(bgM, chrom=chr,chromstart=0,chromend=end,transparency=.50, flip=TRUE, color=SushiColors(2)(2)[2])
|
|
87 labelgenome(chrom=chr,chromstart=0,chromend=end,n=3,scale="$sb", line=0, chromline = 0.5, scaleline = 0.5, scaleadjust =1.05, chromadjust = -0.4)
|
|
88 axis(side=2,las=2,tcl=.2,at=pretty(par("yaxp")[c(1,2)]),labels=-1*pretty(par("yaxp")[c(1,2)]))
|
|
89 mtext("Scaled Read Depth",side=2,line=4.5,cex=1,font=2)
|
|
90 dev.off()
|
|
91 }
|
|
92
|
|
93 fai_b = fai[fai\$V1 %in% intersect(bgM\$V1,bgP\$V1), ]
|
|
94 mapply( f_both, fai_b\$V1, fai_b\$V2)
|
|
95
|
|
96 fai_p = fai[fai\$V1 %in% setdiff(bgP\$V1,bgM\$V1), ]
|
|
97 mapply( f_plus, fai_p\$V1, fai_p\$V2)
|
|
98
|
|
99 fai_m = fai[fai\$V1 %in% setdiff(bgM\$V1,bgP\$V1), ]
|
|
100 mapply( f_minus, fai_m\$V1, fai_m\$V2) `);
|
|
101
|
0
|
102 $R->stopR();
|
|
103 }
|
|
104
|
|
105 sub pie_chart
|
|
106 {
|
|
107 my $dir = shift;
|
|
108 my $in = $dir.'repartition.txt';
|
|
109 my $out = $dir.'pie_chart.png';
|
|
110
|
|
111 my $R = Statistics::R->new();
|
|
112 $R->startR;
|
|
113 $R->send(
|
|
114 qq`
|
|
115 library(plotrix)
|
|
116 library(RColorBrewer)
|
|
117 R =read.table("$in",header=T)
|
|
118 values = round(R\$percentage)
|
|
119 keys = R\$type
|
|
120 lab = paste(values, "%", sep="")
|
|
121 png("$out")
|
|
122 colors <- brewer.pal(7,"Paired")
|
|
123 pie(values, col=colors, labels=lab, clockwise=TRUE)
|
|
124 legend("bottom", legend = keys, fill=colors, bty="n", ncol = 3)
|
|
125 par(mai = c(0,0,0,0))
|
|
126 layout(c(1,2),heights=c(0.3,1))
|
|
127 plot.new()
|
|
128 legend("bottom", legend = keys, fill=colors, bty="n",ncol = 3)
|
|
129 pie(values, col=colors, labels=lab, clockwise=TRUE)
|
|
130 dev.off()`
|
|
131 );
|
|
132 $R->stopR();
|
|
133 }
|
|
134
|
|
135 1;
|