Хорошо, я нашел это. Просто используйте модуль по модулю, чтобы разделить # записей на # меток, чтобы пропустить, и используйте это как смещение. Кажется, GD :: Graph всегда захочет напечатать последнюю этикетку, поэтому вы не можете это контролировать, но вы можете контролировать первую этикетку для печати. Мне кажется, что это задом наперед.
my $graph = GD::Graph::lines->new(400, 500);
my $skip = int ((@tmpDate * 8)/(400-50) + 1); # a function of # of data points, each label 8px. More labels, more skip.
$graph->set(
r_margin => 2,
x_label => 'Date',
y_label => 'Price',
title => "$symbol1, $symbol2",
dclrs => [ qw(lred lblue lgreen lyellow lpurple cyan lorange) ],
transparent => 0,
x_labels_vertical => 1,
x_label_skip => $skip,
x_tick_offset => @tmpDate % $skip, # ensure last label doesn't overwrite second-to-last label
) or die $graph->error;