2013-08-19 59 views
1

我爲學生創建了一個條形圖。現在我想要一個截止線,它表明這是下面的一切,這是一個失敗的等級。 Y軸上第35點的水平線就是我想要的。有什麼建議麼?這是我目前有GD :: GRAPH的參考線

my $graph = GD::Graph::bars->new(800, 800); 

    @data = ( 
    ["Jack","Jill"], 
    ['30','50'], 
    ); 

$graph->set( 
    x_label   => 'Students', 
    y_label   => 'Scores', 
    title    => 'Student Vs. Scores', 
    y_max_value  => 60, 
    y_tick_number  => 8, 
    y_label_skip  => 2 
) or die $graph->error; 


my $gd = $graph->plot(\@data) or die $graph->error; 

open(IMG, '>file.png') or die $!; 
binmode IMG; 
print IMG $gd->png; 

回答

0

你可以做一個混合圖有兩個數據集,一個爲你的常規數據,一個用於截止線。將types選項設置爲$graph->set[qw(bars lines)](首先放置條形圖數據集)。根據docs,「線條或點圖之後繪製的條形圖可能會隱藏較早的數據」。 (我還沒有嘗試過,但我認爲它應該工作)。

my @data = ( 
    ["Jack", "Jill"], 
    [30, 50], 
    [35, 35] # Cutoff line 
); 

my $graph = GD::Graph::mixed->new(800, 800); 

$graph->set( 
    x_label   => 'Students', 
    y_label   => 'Scores', 
    title    => 'Student Vs. Scores', 
    y_max_value  => 60, 
    y_tick_number  => 8, 
    y_label_skip  => 2, 
    types    => [qw(bars lines)] 
) or die $graph->error; 

my $gd = $graph->plot(\@data) or die $graph->error; 

默認情況下,線圖仍然會得出即使某些數據集中點都undef。這意味着您只需要爲線上的第一個和最後一個點給出一個值。例如,如果有五個學生,對截止的y值線會是什麼樣

[35, undef, undef, undef, 35] 

編輯:這種方法留下的開頭和行尾的空隙,因爲它是唯一吸引到第一個和最後一個酒吧的中間。然而,這個perlmonks thread解釋了一些創建垂直線的方法,我想它會很容易地適應水平線。被警告,兩種方法都是醜陋的黑客。

+0

嘿感謝輸入,我結束了在圖形中間的一條小線。我嘗試添加 我@data =( [ 「傑克」, 「吉爾」], [30,50], [35,35,35,35,35,35]#截止線 但這didnt似乎也可以工作 –

+0

@LeRay你需要在每個數據集中有相同的點數,所以如果你只有兩個小節,你只能在另一個數據集中有兩個點,而且你鏈接的圖像是空白的。 – ThisSuitIsBlackNot

+0

啊,這意味着我被卡住了,因爲它創建的這條線從一個條的中間開始到第二個條的中間,沒有其他方法可以有直線切割線嗎? –