1

学生向けの棒グラフを作成しました。ここで、これより下のすべてが不合格であることを示すカットオフラインが必要です。Y-AXIS のポイント 35 にある水平線は、私が持とうとしているものです。助言がありますか?これは私が現在持っているものです

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

1 に答える 1

0

通常のデータ用とカットオフライン用の 2 つのデータセットを使用して混合グラフを作成できます。typesオプションを to$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。これは、線の最初と最後の点に値を与えるだけでよいことを意味します。たとえば、生徒が 5 人いる場合、カットオフラインの y 値は次のようになります。

[35, undef, undef, undef, 35]

編集:このアプローチでは、最初と最後のバーの中央にのみ描画されるため、行の最初と最後にギャップが残ります。ただし、このperlmonks スレッドでは、水平線に簡単に適応できると思われる垂直線を作成するためのいくつかの方法について説明しています。どちらの方法も醜いハックであることに注意してください。

于 2013-08-19T14:58:24.237 に答える