2012-04-01 11 views
6

x_label_skipはラベルをスキップするように設定されていますが、最後のラベルを表示しようとしていて、もう一方のラベルを上書きしています。最後のラベルを書くべきではありません。最後のラベルをスキップする必要があります。私はスキップするラベルの数を、データポイントの数に応じて設定します。私はそれを見つけたGD :: Graphは最後のXラベルを書き、他のラベルを上書きしないようにするにはどうしたらいいですか?

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; 

答えて

5

OK:

コード:

これは次のようにそれが見えるものです。モジュロを使用して、エントリ数をスキップするラベルの数で除算し、それをオフセットとして使用します。 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; 
0

x_last_label_skip => 1は、最後のラベルをスキップするだけで、必要なときに正確に機能します。おそらく、2012年には実装されていなかったかもしれませんが、今はそうです。

関連する問題