5

私はすべての生徒のデータを持っています。

    Student Name         Score
    Jack                  89
    Jill                  70
    Sandy                 40

今、GD::Graph::Bar を使用してこれらを棒グラフにプロットしようとしていますが、perl とモジュールにはかなり慣れていないので、グラフからすべての X 値と Y 値を手動で宣言できることがわかります。プロットされます。

しかし、各生徒の名前とスコアがわからないので(テキストファイルから取得)、値を自動的に実行できるようにしたいのですが、

ハッシュキーと値は良いアプローチだと思っていました。だから私はすべてをハッシュテーブルに入れました、 %hash(学生名)=(スコア)

これを棒グラフとしてプロットしたり、私を案内したりするのを手伝ってくれる人はいますか? または、別のアプローチをお勧めしますか?

ありがとう

"アップデート

これは、生徒の名前を入力して手動でグラフをプロットできる部分です。

 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

3 に答える 3

1

GD::Graph のサンプル ディレクトリのコードを適用しました。

use warnings;
use strict;
use GD::Graph::bars;
use GD::Graph::Data;

my %students = (
    Jack    => 89,
    Jill    => 70,
    Sandy   => 40,
);

my @scores;
my @names;
for (keys %students) {
    push @names, $_;
    push @scores, $students{$_};
}

my $data = GD::Graph::Data->new([
    [@names],
    [@scores],
]) or die GD::Graph::Data->error;

my $my_graph = GD::Graph::bars->new();
$my_graph->set(
    x_label         => 'Name',
    y_label         => 'Score',
    title           => 'A Simple Bar Chart',
) or warn $my_graph->error;
$my_graph->plot($data) or die $my_graph->error();
save_chart($my_graph, 'graph');

sub save_chart {
    my $chart = shift or die "Need a chart!";
    my $name = shift or die "Need a name!";
    local(*OUT);

    my $ext = $chart->export_format;

    open(OUT, ">$name.$ext") or
        die "Cannot open $name.$ext for write: $!";
    binmode OUT;
    print OUT $chart->gd->$ext();
    close OUT;
}
于 2013-08-09T16:52:00.033 に答える