#! perl -slw use strict; use Time::Local qw[ timelocal ]; use POSIX qw[ strftime ]; use GD::Graph::points; my @x_vals = ( '2012-11-07', '2012-11-08', '2012-11-15', '2012-11-19', '2012-11-30', ); my @y_vals = ( 11, 12, 13, 14, 15, ); # ------------------------------------------- my @epoch_x_vals = map { my( $y, $m, $d ) = split /-/, $_; timelocal( 0,0,0, $d, $m, $y ); } @x_vals; my @data = (\@epoch_x_vals, \@y_vals); sub x_number_formatter { return strftime "%Y-%m-%d", localtime shift; } my $graph = GD::Graph::points->new(400, 300); $graph->set( x_label => 'X label', x_labels_vertical => 1, x_tick_number => 5, # experimented with this value a bit x_min_value => $epoch_x_vals[ 0 ] - 1e6, x_max_value => $epoch_x_vals[ 4 ] + 1e6, x_number_format => \&x_number_formatter, y_label => 'Y label', title => 'some title', ) or die $graph->error; my $gd = $graph->plot(\@data) or die $graph->error; open(my $img, '> plot.png') or die $!; binmode $img; print $img $gd->png; close $img; system 'plot.png';