2013-08-19 1 views
1

학생들을위한 막 대형 차트를 만들었습니다. 이제 나는 이것이 아래의 모든 것이 실패 학년이라는 것을 보여주는 컷오프 라인을 갖고 싶습니다. Y-AXIS의 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에 따르면 "선 또는 점 그래프 다음에 그려진 막대 그래프는 이전 데이터를 가릴 수 있습니다." (아직 시도하지는 않았지만 제대로 작동해야한다고 생각합니다.) 데이터 세트에서 포인트 중 일부는 undef을 경우에도

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; 

기본적으로 선 그래프는 여전히 그릴 것입니다. 즉, 선상의 첫 번째 점과 마지막 점에 대한 값만 지정하면됩니다. 다섯 명 학생, 컷오프에 대한 y 값이있는 경우 예를 들어, 라인

[35, undef, undef, undef, 35] 

편집과 같습니다이 방법은 줄의 시작과 끝의 간격을 잎이 단지에 그려집니다 때문에 첫 번째와 마지막 막대의 가운데. 그러나이 perlmonks thread은 수평선을 쉽게 적용 할 수있는 상상 선을 만드는 몇 가지 방법을 설명합니다. 두 가지 방법 모두 추악한 해킹이라고 경고하십시오.

+0

안녕하세요, 입력을 주셔서 감사합니다. 그래프의 중간에 작은 선이 생겼습니다. 나는 내 @data = ( [ "잭", "질", [30, 50], [35, 35, 35, 35, 35, 35] # 컷오프 라인 그러나 didnt가 추가 시도 –

+0

@LeRay 각 데이터 집합에 같은 수의 점이 있어야하므로 두 개의 막대 만 있으면 다른 데이터 집합에 두 점만있을 수 있으며 링크 한 이미지는 비어 있습니다. – ThisSuitIsBlackNot

+0

아, 그래서 내가 막혔다는 것을 의미합니다. 하나의 막대 가운데에서 시작하여 두 번째 막대의 중간에서 끝나는 이후로, 직선을 끊을 수있는 다른 방법은 없을까요? –