2012-04-01 10 views
6

Configuré x_label_skip para omitir las etiquetas, pero todavía trata de mostrar la última etiqueta y sobrescribe la otra etiqueta, y se ve desordenada. No debería escribir la última etiqueta. Debería omitir la última etiqueta. Establecí el número de etiquetas para omitir como una función de cuántos puntos de datos hay.¿Cómo evito que GD :: Graph escriba la última etiqueta X y sobrescriba mis otras etiquetas?

Esto es lo que parece:

Código:

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; 

Respuesta

5

Ok lo he encontrado. Simplemente use módulo para dividir el n. ° de entradas por # de etiquetas para omitir, y úselo como compensación. Parece que GD :: Graph siempre querrá imprimir la última etiqueta, por lo que no puede controlar eso, pero puede controlar la primera etiqueta para imprimir. Me parece al revés, pero lo que sea.

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; 
0

x_last_label_skip => 1 funciona exactamente como usted lo necesita, simplemente omitiendo la última etiqueta. Probablemente no se implementó en 2012, pero ahora lo es.

Cuestiones relacionadas