我正在编写一个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]);
有人可以建议我更好的方法吗?
答案 0 :(得分:3)
在进入饼图和类似的东西之前,我建议你自己更新基本的Perl数据结构和参考。请阅读perlreftut,之后你应该能够自己解决这个问题。
答案 1 :(得分:3)
我不确定我理解你要做什么,但这个例子将产生3个饼图,所有这些都使用相同的类别集。我会提出Manni的建议:花一些时间在perlreftut和perldsc。此外,如果您下载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;
}
答案 2 :(得分: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]是通过数组引用的第一个索引元素,它已经是一个数组引用。
答案 3 :(得分:0)
我使用下面的代码找到了这个问题的解决方案。
my @pairs = map{"$Array1[$_]@$array2[$_],"} 0..$#Array1;
在此之后,数组@pairs中的值可用于创建图形。