0

これらの配列でGD::Graph::pieを使用して円グラフを作成する Perl スクリプトを作成しています。

@Array1 = ("A", "B", "C", "D");
$array2 = [
      ['upto 100 values'],
      ['upto 100 values'],
      ['upto 100 values'],
      ['upto 100 values']
    ];

これを行うための私の理解によると、次のように、上記の配列の参照を使用して配列を作成する必要があります。

 my @graph_data = (\@Array1, @$array2);

foreachループも使用しようとしましたが、良い結果が得られませんでした。@Array1最初の値に対して最初の値、$array22 番目の値@Array1に対して 2 番目の値などの円グラフを作成したいと考えています$array2。また、 の値ごとに、各グラフに同じタイトルを付けたいと思います@Array1

eg.
my @graph_data1 = (\@Array1[0], @$array2[0]);

誰でもこれを行うためのより良い方法を提案してもらえますか?

4

4 に答える 4

3

何をしようとしているのかよくわかりませんが、この例では 3 つの円グラフが作成され、すべて同じカテゴリのセットが使用されます。私は Manni のアドバイスを支持します: perlreftutperldscに時間を費やしてください。また、GD::Graphモジュールをダウンロードすると、円グラフを含む多くの例が提供されます (samplesサブディレクトリを参照)。

use strict;
use warnings;
use GD::Graph::pie;

my @categories = qw(foo bar fubb buzz);
my @data = ( 
    [   25,    32,    10,     44 ],  # Data values for chart #1
    [  123,   221,   110,    142 ],  # Data values for chart #2
    [  225,   252,   217,    264 ],  # etc.
);

for my $i (0 .. $#data){
    my $chart = GD::Graph::pie->new;
    my @pie_data = ( \@categories, $data[$i] );
    $chart->plot(\@pie_data);

    open(my $fh, '>', "pie_chart_$i.gif") or die $!;
    binmode $fh;
    print $fh $chart->gd->gif;
    close $fh;
}
于 2009-09-08T12:58:40.433 に答える
3

円グラフやそのようなものに入る前に、Perl の基本的なデータ構造とリファレンスについて最新情報を入手することをお勧めします。perlreftutを読んでください。後でこの問題を自分で解決できるはずです。

于 2009-09-08T12:32:42.530 に答える
1

他の答えがあまり直接的ではないことをより平易な英語で述べるには:

my @graph_data = (\Array1, $@array2);
my @graph_data1 = (\Array1[0], $@array2[0]);

怒っているように見えます。あなたはほぼ確実に次のことを意味します:

my @graph_data = (\@Array1, $array2);
# you want the first element of each list in the same datastructure?
my @graph_data1 = ([$Array1[0]], [$array2->[0]]); # (['A'], [[..numbers..]])
                                                  # Note *two* [ and ] in 2nd bit
# ... or you want a different datastructure?
my @graph_data1 = ($Array1[0], $array2->[0]); # ('A', [..numbers..]) 

@Array1 は配列であり、それへの参照が必要であり、それは \@Array1 になります。

$array2 はすでに配列への参照です。これには配列への参照が含まれており、インデックス 0 の配列への参照を含むリストが必要であると仮定します。したがって、$array2->[0] は配列参照を介して最初にインデックス付けされた要素であり、それは既に配列参照です。

于 2009-09-08T16:33:42.403 に答える
0

以下のコードを使用して、この問題の解決策を見つけました。

my @pairs = map{"$Array1[$_]@$array2[$_],"} 0..$#Array1;

この後、配列 @pairs の値を使用してグラフを作成できます。

于 2009-09-14T08:24:39.970 に答える