1

我为学生创建了一个条形图。现在我想要一个截止线,它表明这是低于此的所有内容都是不及格的成绩。Y 轴上第 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

您可以使用两个数据集制作一个混合图,一个用于常规数据,一个用于截止线。将types选项设置$graph->set[qw(bars lines)](首先放置条形图数据集)。根据文档,“在线条或点图之后绘制的条形图可能会掩盖早期的数据”。(我还没有尝试过,但我认为它应该可以工作)。

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 线程解释了几种创建垂直线的方法,我认为这些方法可以很容易地适应水平线。请注意,这两种方法都是丑陋的黑客。

于 2013-08-19T14:58:24.237 回答