The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
#
# Testprogram for f_x_ticks
#
#======================================================================

use strict;
use Chart::LinesPoints;

print "1..1\n";

my @x_values      = ();    # real x values
my @y_values      = ();    # real y values
my @x_plot_values = ();    # x values for plot
my @y_plot_values = ();    # y values for plot

my $graphic;
my $min_x = -15;           # random start
my $max_x = 10;            # random stop
my $min_y;
my $max_y;

my $x;
my $y;

#------------------------------------------------------------------------------------
# Start
#------------------------------------------------------------------------------------

$x = $min_x;
for ( my $idx = 0 ; $x <= $max_x ; $idx += 0.1 )
{
    $x = $min_x + $idx;
    $x_values[$idx] = $x;
    $y_values[$idx] = cos( ( $x - $min_x ) );
}

undef $min_y;
undef $max_y;
for ( my $idx = 0 ; $idx <= $#x_values ; $idx++ )
{
    $x_plot_values[$idx] = $x_values[$idx] + $min_x;
    $y_plot_values[$idx] = $y_values[$idx];
    if ( !defined($min_y) )
    {
        $min_y = $y_values[$idx];
    }
    else
    {
        $min_y = ( $min_y < $y_values[$idx] ) ? $min_y : $y_values[$idx];
    }
    if ( !defined($max_y) )
    {
        $max_y = $y_values[$idx];
    }
    else
    {
        $max_y = ( $max_y > $y_values[$idx] ) ? $max_y : $y_values[$idx];
    }
}

#------------------------------------------------------------------------------------
# Make it
#------------------------------------------------------------------------------------

$graphic = Chart::LinesPoints->new( 750, 600 );
$graphic->set( 'brush_size' => 2 );

$graphic->add_dataset(@x_plot_values);

$graphic->add_dataset(@y_plot_values);

$graphic->set( 'min_val' => $min_y );
$graphic->set( 'max_val' => $max_y );

#$graphic -> set ('y_ticks' => 11 );

#$graphic -> set ('skip_x_ticks' => 100);
$graphic->set( 'pt_size'         => 2 );
$graphic->set( 'grey_background' => 'true' );
$graphic->set( 'graph_border'    => 18 );
$graphic->set( 'title'           => "f_tick example for x and y values" );
$graphic->set( 'y_grid_lines'    => 'false' );
$graphic->set( 'x_grid_lines'    => 'false' );
$graphic->set( 'x_ticks'         => 'vertical' );
$graphic->set( 'legend'          => 'none' );
$graphic->set( 'x_label'         => 'some x-values' );
$graphic->set( 'y_label'         => 'f = cos(g(x))' );

# use a special function to convert the x values to HH:MM:SS
$graphic->set( 'f_x_tick' => \&convert_to_real_x );

if ( $graphic->can('png') )
{
    my $picture_file = "samples/f_ticks_1.png";
    $graphic->png($picture_file);
}

print "ok 1\n";

exit(0);

sub convert_to_real_x
{
    my $plot_x = shift;

    my $result = sprintf "%6.1f", $plot_x - $min_x;
    return ($result);
}