SVG-Graph
view release on metacpan or search on metacpan
Graph/Glyph/axis.pm view on Meta::CPAN
my $yintercept = $self->y_intercept || 0;
#draw x axis line
$group->line(x1=>$self->xoffset,
y1=>$self->yoffset + $self->ysize - ($yintercept * $yscale),
x2=>$self->xoffset + $self->xsize,
y2=>$self->yoffset + $self->ysize - ($yintercept * $yscale),
style=>{$self->_style}
);
#draw y axis line
$group->line(x1=>$self->xoffset + ($xintercept * $xscale),
y1=>$self->yoffset,
x2=>$self->xoffset + ($xintercept * $xscale),
y2=>$self->yoffset + $self->ysize,
style=>{$self->_style}
);
my @x_tick_labels = ();
my @x_intertick_labels = ();
if($self->x_tick_labels){
@x_tick_labels = @{ $self->x_tick_labels };
}
if($self->x_intertick_labels){
@x_intertick_labels = @{ $self->x_intertick_labels };
}
my @y_tick_labels = ();
my @y_intertick_labels = ();
if($self->y_tick_labels){
@y_tick_labels = @{ $self->y_tick_labels };
}
if($self->y_intertick_labels){
@y_intertick_labels = @{ $self->y_intertick_labels };
}
#x ticks
if($self->x_absolute_ticks and $self->x_fractional_ticks){
die "x axis can't have both absolute and fractional ticks";
} elsif($self->x_absolute_ticks){
for(my $tick = $self->group->xmin ; $tick <= $self->group->xmax; $tick += $self->x_absolute_ticks){
my $tickpos = ($tick - $self->group->xmin) * $xscale;
$group->line(x1=>$self->xoffset+$tickpos,
y1=>$self->yoffset+$self->ysize - ($self->y_intercept * $yscale),
x2=>$self->xoffset+$tickpos,
y2=>$self->yoffset+$self->ysize - ($self->y_intercept * $yscale)+($self->group->_parent_svg->margin/8),
style=>{$self->_style}
);
#tick label
my $x_tick_label = shift @x_tick_labels;
my $x = $self->xoffset + $tickpos;
my $y = $self->yoffset+$self->ysize - ($self->y_intercept * $yscale)+($self->group->_parent_svg->margin/4);
$group->text(
x=>$x,
y=>$y,
transform=>"rotate(90,$x,$y)",
)->cdata($x_tick_label);
#intertick label
my $x_intertick_label = shift @x_intertick_labels;
$tickpos = (((2 * $tick) - 1) / 2) * $xscale;
$x = $self->xoffset + $tickpos;
$group->text(
x=>$x,
y=>$y,
transform=>"rotate(90,$x,$y)",
)->cdata($x_intertick_label);
}
} elsif($self->x_fractional_ticks){
my $inc = $self->group->xrange / $self->x_fractional_ticks;
for(my $tick = $self->group->xmin ; $tick <= $self->group->xmax; $tick += $inc){
my $tickpos = ($tick - $self->group->xmin) * $xscale;
$group->line(x1=>$self->xoffset+$tickpos,
y1=>$self->yoffset+$self->ysize - ($self->y_intercept * $yscale),
x2=>$self->xoffset+$tickpos,
y2=>$self->yoffset+$self->ysize - ($self->y_intercept * $yscale)+($self->group->_parent_svg->margin/8),
style=>{$self->_style}
);
}
}
#y ticks
if($self->y_absolute_ticks and $self->y_fractional_ticks){
die "y axis can't have both absolute and fractional ticks";
} elsif($self->y_absolute_ticks){
for(my $tick = $self->group->ymin ; $tick <= $self->group->ymax; $tick += $self->y_absolute_ticks){
my $tickpos = ($tick - $self->group->ymin) * $yscale;
$group->line(x1=>$self->xoffset + ($self->x_intercept * $xscale),
y1=>$self->yoffset+$self->ysize-$tickpos,
x2=>$self->xoffset + ($self->x_intercept * $xscale)-($self->group->_parent_svg->margin/8),
y2=>$self->yoffset+$self->ysize-$tickpos,
style=>{$self->_style}
);
#tick label
my $y_tick_label = shift @y_tick_labels;
# my $x = $self->xoffset + $tickpos;
my $x = $self->xoffset + ($self->x_intercept * $xscale) - ($self->group->_parent_svg->margin);
# my $y = $self->yoffset+$self->ysize+($self->group->_parent_svg->margin/4);
my $y = $self->yoffset + $self->ysize - $tickpos;
$group->text(
x=>$x,
y=>$y,
# transform=>"rotate(90,$x,$y)",
)->cdata($y_tick_label);
#intertick label
my $y_intertick_label = shift @y_intertick_labels;
$tickpos = (((2 * $tick) - 1) / 2) * $xscale;
$x = $self->xoffset + $tickpos;
$group->text(
x=>$x,
y=>$y,
# transform=>"rotate(90,$x,$y)",
)->cdata($y_intertick_label);
}
} elsif($self->y_fractional_ticks){
my $inc = $self->group->yrange / $self->y_fractional_ticks;
for(my $tick = $self->group->ymin ; $tick <= $self->group->ymax ; $tick += $inc){
my $tickpos = ($tick - $self->group->ymin) * $xscale;
$group->line(x1=>$self->xoffset + ($self->x_intercept * $xscale),
y1=>$self->yoffset+$self->ysize-$tickpos,
x2=>$self->xoffset + ($self->x_intercept * $xscale)-($self->group->_parent_svg->margin/8),
y2=>$self->yoffset+$self->ysize-$tickpos,
style=>{$self->_style}
);
}
}
}
=head2 x_intercept
Title : x_intercept
Usage : $obj->x_intercept($newval)
Function:
Example :
Returns : value of x_intercept (a scalar)
Args : on set, new value (a scalar or undef, optional)
=cut
sub x_intercept{
my $self = shift;
return $self->{'x_intercept'} = shift if @_;
return $self->{'x_intercept'};
}
=head2 y_intercept
Title : y_intercept
Usage : $obj->y_intercept($newval)
Function:
Example :
Returns : value of y_intercept (a scalar)
Args : on set, new value (a scalar or undef, optional)
=cut
sub y_intercept{
my $self = shift;
return $self->{'y_intercept'} = shift if @_;
return $self->{'y_intercept'};
}
=head2 x_fractional_ticks
Title : x_fractional_ticks
Usage : $obj->x_fractional_ticks($newval)
( run in 1.375 second using v1.01-cache-2.11-cpan-2398b32b56e )