0

我正在编写一个 Perl 脚本来使用GD::Graph::pie和这些数组创建饼图:

@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一个值相对$array2,第二个值@Array1与第二个值相对$array2,依此类推。此外,我想根据@Array1.

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

谁能建议我更好的方法来做到这一点?

4

4 回答 4

3

在进入饼图和类似的东西之前,我建议你更新一下基本的 Perl 数据结构和参考。请阅读perlreftut,之后您应该能够自己解决这个问题。

于 2009-09-08T12:32:42.530 回答
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 回答
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 回答