How do I keep GD::Graph from writing the last X label and overwriting my other labels?

StackOverflow https://stackoverflow.com/questions/9961530

  •  28-05-2021
  •  | 
  •  

Question

I set x_label_skip to skip labels, but it still tries to display the very last label and it is overwriting the other label, and looks messy. It shouldn't be writing the last label. It should be skipping the last label. I set the number of labels to skip as a function of how many data points there are.

This is what it looks like:

Code:

my $graph = GD::Graph::lines->new(400, 500);
$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      => int ((@tmpDate * 8)/(400-50) + 1), # a function of # of data points, each label 8px. More labels, more skip.
) or die $graph->error;
Était-ce utile?

La solution

Ok I found it. Just use modulo to divide the # of entries by # of labels to skip, and use that as the offset. It seems GD::Graph will always want to print the last label, so can't control that, but you can control the 1st label to print. Seems backwards to me but whatever.

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;

Autres conseils

x_last_label_skip => 1 works exactly as you need it, just skipping the last label. Probably it wasn't implemented in 2012, but now it is.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top