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 )