my $cc = Chart::Clicker->new( width => 800, height => 300 ); my ( @k, @v, @x_tick_values ); # assumes data is in a hash keyed by dates as YYYYMMDD for my $datetime ( sort { $a <=> $b } keys %data ) { my ( $y, $m, $d ) = unpack("a4 a2 a2", $datetime); my $epoch = DateTime->new( year => $y, month => $m, day => $d )->epoch; push @k, $epoch; push @v, $data{ $datetime }; push @x_tick_values, $epoch if $d eq '01'; } my $series = Chart::Clicker::Data::Series->new( name => 'Sales', keys => \@k, values => \@v, ); my $dataset = Chart::Clicker::Data::DataSet->new( series => [ $series ] ); $cc->add_to_datasets( $dataset ); $cc->title->text('Daily Report'); $cc->title->font->size( 20 ); $cc->title->padding->bottom( 5 ); my $context = $cc->get_context('default'); my $renderer = Chart::Clicker::Renderer::Line->new( opacity => .6 ); $renderer->brush->width( 2 ); $context->renderer( $renderer ); $context->domain_axis( Chart::Clicker::Axis::DateTime->new( format => "%Y-%m", # Specify format here. I'm using "%Y-%m" since I # output only one label per month ticks => scalar keys %data, tick_values => \@x_tick_values, position => 'bottom', tick_label_angle => 0.78539816, # 45 deg in radians orientation => 'vertical', fudge_amount => .05, ) ); $context->range_axis->format( '%d' ); $context->range_axis->fudge_amount( .02 ); my $chart_path = "/path/to/your/chart.png"; $cc->write_output( $chart_path );