annotate variant_effect_predictor/Bio/Graphics/Glyph/xyplot.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 package Bio::Graphics::Glyph::xyplot;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 use Bio::Graphics::Glyph::segments;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 use vars '@ISA';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 use GD 'gdTinyFont';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 @ISA = 'Bio::Graphics::Glyph::segments';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 use constant DEFAULT_POINT_RADIUS=>1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 my %SYMBOLS = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 triangle => \&draw_triangle,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 square => \&draw_square,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 disc => \&draw_disc,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 point => \&draw_point,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 sub point_radius {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 shift->option('point_radius') || DEFAULT_POINT_RADIUS;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 sub pad_top { 0 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 sub draw {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 my ($gd,$dx,$dy) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 my ($left,$top,$right,$bottom) = $self->calculate_boundaries($dx,$dy);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 my @parts = $self->parts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 return $self->SUPER::draw(@_) unless @parts > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 # figure out the scale and such like
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 my $max_score = $self->option('max_score');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 my $min_score = $self->option('min_score');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 unless (defined $max_score && defined $min_score) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 my $first = $parts[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 $max_score = $min_score = eval { $first->feature->score} || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 for my $part (@parts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 my $s = eval { $part->feature->score };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 next unless defined $s;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 $max_score = $s if $s > $max_score;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 $min_score = $s if $s < $min_score;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 # if a scale is called for, then we adjust the max and min to be even
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 # multiples of a power of 10.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 if ($self->option('scale')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 $max_score = max10($max_score);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 $min_score = min10($min_score);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 my $height = $self->option('height');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 my $scale = $max_score > $min_score ? $height/($max_score-$min_score)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 : 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 my $x = $dx;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 my $y = $dy + $self->top + $self->pad_top;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 # now seed all the parts with the information they need to draw their positions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 foreach (@parts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 my $s = eval {$_->feature->score};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 next unless defined $s;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 my $position = ($s-$min_score) * $scale;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 $_->{_y_position} = $bottom - $position;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 my $type = $self->option('graph_type');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 $self->_draw_histogram($gd,$x,$y) if $type eq 'histogram';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 $self->_draw_boxes($gd,$x,$y) if $type eq 'boxes';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 $self->_draw_line ($gd,$x,$y) if $type eq 'line'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 or $type eq 'linepoints';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 $self->_draw_points($gd,$x,$y) if $type eq 'points'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 or $type eq 'linepoints';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 $self->_draw_scale($gd,$scale,$min_score,$max_score,$dx,$dy) if $self->option('scale');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 sub log10 { log(shift)/log(10) }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 sub max10 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 my $a = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 $a = 1 if $a <= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 my $l=int(log10($a));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 $l = 10**$l;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 my $r = $a/$l;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 return $r*$l if int($r) == $r;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 return $l*int(($a+$l)/$l);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 sub min10 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 my $a = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 $a = 1 if $a <= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 my $l=int(log10($a));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 $l = 10**$l;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 my $r = $a/$l;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 return $r*$l if int($r) == $r;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 return $l*int($a/$l);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 sub _draw_histogram {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 my ($gd,$left,$top) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 my @parts = $self->parts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 my $fgcolor = $self->fgcolor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 # draw each of the component lines of the histogram surface
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 for (my $i = 0; $i < @parts; $i++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 my $part = $parts[$i];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 my $next = $parts[$i+1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 my ($x1,$y1,$x2,$y2) = $part->calculate_boundaries($left,$top);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 $gd->line($x1,$part->{_y_position},$x2,$part->{_y_position},$fgcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 next unless $next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my ($x3,$y3,$x4,$y4) = $next->calculate_boundaries($left,$top);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 if ($x2 == $x3) {# connect vertically to next level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 $gd->line($x2,$part->{_y_position},$x2,$next->{_y_position},$fgcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 $gd->line($x2,$part->{_y_position},$x2,$y2,$fgcolor); # to bottom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 $gd->line($x2,$y2,$x3,$y2,$fgcolor); # to right
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 $gd->line($x3,$y4,$x3,$next->{_y_position},$fgcolor); # up
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 # end points: from bottom to first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 my ($x1,$y1,$x2,$y2) = $parts[0]->calculate_boundaries($left,$top);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 $gd->line($x1,$y2,$x1,$parts[0]->{_y_position},$fgcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 # from last to bottom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 my ($x3,$y3,$x4,$y4) = $parts[-1]->calculate_boundaries($left,$top);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 $gd->line($x4,$parts[-1]->{_y_position},$x4,$y4,$fgcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 # from left to right -- don't like this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 # $gd->line($x1,$y2,$x4,$y4,$fgcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 # That's it. Not too hard.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 sub _draw_boxes {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 my ($gd,$left,$top) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 my @parts = $self->parts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 my $fgcolor = $self->fgcolor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 my $bgcolor = $self->bgcolor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 my $height = $self->height;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 # draw each of the component lines of the histogram surface
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 for (my $i = 0; $i < @parts; $i++) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 my $part = $parts[$i];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 my $next = $parts[$i+1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my ($x1,$y1,$x2,$y2) = $part->calculate_boundaries($left,$top);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 $self->filled_box($gd,$x1,$part->{_y_position},$x2,$y2,$bgcolor,$fgcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 next unless $next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 my ($x3,$y3,$x4,$y4) = $next->calculate_boundaries($left,$top);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 $gd->line($x2,$y2,$x3,$y4,$fgcolor) if $x2 < $x3;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 # That's it.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 sub _draw_line {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 my ($gd,$left,$top) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 my @parts = $self->parts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 my $fgcolor = $self->fgcolor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 my $bgcolor = $self->bgcolor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 # connect to center positions of each interval
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 my $first_part = shift @parts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 my ($x1,$y1,$x2,$y2) = $first_part->calculate_boundaries($left,$top);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 my $current_x = ($x1+$x2)/2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 my $current_y = $first_part->{_y_position};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 for my $part (@parts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 my ($x1,$y1,$x2,$y2) = $part->calculate_boundaries($left,$top);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 my $next_x = ($x1+$x2)/2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 my $next_y = $part->{_y_position};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 $gd->line($current_x,$current_y,$next_x,$next_y,$fgcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 ($current_x,$current_y) = ($next_x,$next_y);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 sub _draw_points {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 my ($gd,$left,$top) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 my $symbol_name = $self->option('point_symbol') || 'point';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 my $symbol_ref = $SYMBOLS{$symbol_name};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 my @parts = $self->parts;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 my $bgcolor = $self->bgcolor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 my $pr = $self->point_radius;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 for my $part (@parts) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 my ($x1,$y1,$x2,$y2) = $part->calculate_boundaries($left,$top);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 my $x = ($x1+$x2)/2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 my $y = $part->{_y_position};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 $symbol_ref->($gd,$x,$y,$pr,$bgcolor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 sub _draw_scale {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 my ($gd,$scale,$min,$max,$dx,$dy) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my ($x1,$y1,$x2,$y2) = $self->calculate_boundaries($dx,$dy);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 my $side = $self->option('scale');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 return if $side eq 'none';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 $side ||= 'both';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 my $fg = $self->fgcolor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 my $half = ($y1+$y2)/2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 $gd->line($x1+1,$y1,$x1+1,$y2,$fg) if $side eq 'left' || $side eq 'both';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 $gd->line($x2-2,$y1,$x2-2,$y2,$fg) if $side eq 'right' || $side eq 'both';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 for ([$y1,$max],[$half,int(($max-$min)/2+0.5)]) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 $gd->line($x1,$_->[0],$x1+3,$_->[0],$fg) if $side eq 'left' || $side eq 'both';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $gd->line($x2-4,$_->[0],$x2,$_->[0],$fg) if $side eq 'right' || $side eq 'both';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 if ($side eq 'left' or $side eq 'both') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $gd->string(gdTinyFont,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $x1 + 5,$_->[0]-(gdTinyFont->height/3),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $_->[1],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 $fg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 if ($side eq 'right' or $side eq 'both') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 $gd->string(gdTinyFont,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 $x2-5 - (length($_->[1])*gdTinyFont->width),$_->[0]-(gdTinyFont->height/3),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 $_->[1],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 $fg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 # we are unbumpable!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 sub bump {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 sub connector {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 my $type = $self->option('graph_type');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 return 1 if $type eq 'line' or $type eq 'linepoints';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 sub height {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 return $self->option('graph_height') || $self->SUPER::height;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 sub draw_triangle {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 my ($gd,$x,$y,$pr,$color) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 my ($vx1,$vy1) = ($x-$pr,$y+$pr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 my ($vx2,$vy2) = ($x, $y-$pr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my ($vx3,$vy3) = ($x+$pr,$y+$pr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $gd->line($vx1,$vy1,$vx2,$vy2,$color);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 $gd->line($vx2,$vy2,$vx3,$vy3,$color);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 $gd->line($vx3,$vy3,$vx1,$vy1,$color);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 sub draw_square {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 my ($gd,$x,$y,$pr,$color) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 $gd->line($x-$pr,$y-$pr,$x+$pr,$y-$pr,$color);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 $gd->line($x+$pr,$y-$pr,$x+$pr,$y+$pr,$color);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 $gd->line($x+$pr,$y+$pr,$x-$pr,$y+$pr,$color);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 $gd->line($x-$pr,$y+$pr,$x-$pr,$y-$pr,$color);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 sub draw_disc {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 my ($gd,$x,$y,$pr,$color) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 $gd->arc($x,$y,$pr,$pr,0,360,$color);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 sub draw_point {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 my ($gd,$x,$y,$pr,$color) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $gd->setPixel($x,$y,$color);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 sub _subseq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 my $feature = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 return $feature->segments if $feature->can('segments');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 my @split = eval { my $id = $feature->location->seq_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 my @subs = $feature->location->sub_Location;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 grep {$id eq $_->seq_id} @subs};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 return @split if @split;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 return $feature->sub_SeqFeature if $feature->can('sub_SeqFeature');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 sub keyglyph {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 my $scale = 1/$self->scale; # base pairs/pixel
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 my $feature =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 Bio::Graphics::Feature->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 -segments=>[ [ 0*$scale,9*$scale],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 [ 10*$scale,19*$scale],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 [ 20*$scale, 29*$scale]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 -name => 'foo bar',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 -strand => '+1');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 ($feature->segments)[0]->score(10);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 ($feature->segments)[1]->score(50);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 ($feature->segments)[2]->score(25);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 my $factory = $self->factory->clone;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $factory->set_option(label => 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $factory->set_option(bump => 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 $factory->set_option(connector => 'solid');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 my $glyph = $factory->make_glyph(0,$feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 return $glyph;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 __END__
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 Bio::Graphics::Glyph::xyplot - The xyplot glyph
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 See L<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 This glyph is used for drawing features that have a position on the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 genome and a numeric value. It can be used to represent gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 prediction scores, motif-calling scores, percent similarity,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 microarray intensities, or other features that require a line plot.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 The X axis represents the position on the genome, as per all other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 glyphs. The Y axis represents the score. Options allow you to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 the height of the glyph, the maximum and minimum scores, the color of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 the line and axis, and the symbol to draw.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 The plot is designed to work on a single feature group that contains
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 subfeatures. It is the subfeatures that carry the score
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 information. The best way to arrange for this is to create an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 aggregator for the feature. We'll take as an example a histogram of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 repeat density in which interval are spaced every megabase and the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 score indicates the number of repeats in the interval; we'll assume
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 that the database has been loaded in in such a way that each interval
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 is a distinct feature with the method name "density" and the source
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 name "repeat". Furthermore, all the repeat features are grouped
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 together into a single group (the name of the group is irrelevant).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 If you are using Bio::DB::GFF and Bio::Graphics directly, the sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 of events would look like this:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 my $agg = Bio::DB::GFF::Aggregator->new(-method => 'repeat_density',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 -sub_parts => 'density:repeat');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 my $db = Bio::DB::GFF->new(-dsn=>'my_database',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 -aggregators => $agg);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 my $segment = $db->segment('Chr1');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 my @features = $segment->features('repeat_density');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 my $panel = Bio::Graphics::Panel->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 $panel->add_track(\@features,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 -glyph => 'xyplot');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 If you are using Generic Genome Browser, you will add this to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 configuration file:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 aggregators = repeat_density{density:repeat}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 clone alignment etc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 =head2 OPTIONS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 The following options are standard among all Glyphs. See
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 L<Bio::Graphics::Glyph> for a full explanation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 Option Description Default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 ------ ----------- -------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 -fgcolor Foreground color black
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 -outlinecolor Synonym for -fgcolor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 -bgcolor Background color turquoise
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 -fillcolor Synonym for -bgcolor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 -linewidth Line width 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 -height Height of glyph 10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 -font Glyph font gdSmallFont
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 -label Whether to draw a label 0 (false)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 -description Whether to draw a description 0 (false)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 In addition, the alignment glyph recognizes the following
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 glyph-specific options:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 Option Description Default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 ------ ----------- -------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 -max_score Maximum value of the Calculated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 feature's "score" attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 -min_score Minimum value of the Calculated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 feature's "score" attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 -graph_type Type of graph to generate. Histogram
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 Options are: "histogram",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 "boxes", "line", "points",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 or "linepoints".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 -point_symbol Symbol to use. Options are none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 "triangle", "square", "disc",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 "point", and "none".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 -point_radius Radius of the symbol, in 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 pixels
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 -scale Position where the Y axis none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 scale is drawn if any.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 It should be one of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 "left", "right" or "none"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 -graph_height Specify height of the graph Same as the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 "height" option.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 =head1 BUGS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 Please report them.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 =head1 SEE ALSO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 L<Bio::Graphics::Panel>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 L<Bio::Graphics::Track>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 L<Bio::Graphics::Glyph::transcript2>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 L<Bio::Graphics::Glyph::anchored_arrow>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 L<Bio::Graphics::Glyph::arrow>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 L<Bio::Graphics::Glyph::box>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 L<Bio::Graphics::Glyph::primers>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 L<Bio::Graphics::Glyph::segments>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 L<Bio::Graphics::Glyph::toomany>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 L<Bio::Graphics::Glyph::transcript>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 =head1 AUTHOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 Lincoln Stein E<lt>lstein@cshl.orgE<gt>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 Copyright (c) 2001 Cold Spring Harbor Laboratory
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 This library is free software; you can redistribute it and/or modify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 it under the same terms as Perl itself. See DISCLAIMER.txt for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 disclaimers of warranty.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453