Perl GD :: Graph无效数据集:0(饼)

时间:2016-04-22 05:46:40

标签: perl pie-chart gd-graph

我正在尝试制作一些PERL脚本(我是初学者!)

我拿了一个示例代码并根据我的需要编辑它。

因此,任务是从csv文件中读取数据,将它们放入html表中,并以饼图形式显示图表。

该表已经有效,只有饼图是我的问题。我已经查看并尝试了代码中图表部分的许多更改,但没有赢得带来。

这是我的代码:

URL

如果有人能给我最后需要的提示,那会很棒。 问候

2 个答案:

答案 0 :(得分:1)

调试时,请始终确认您的数据和脚本流程,不要假设任何正确的内容。

尝试

use Data::Dumper; # at the top of your script
[...]
print Dumper(\@diagarray); # just before your $graph->plot call

您可能会注意到您的数据格式与http://search.cpan.org/~ruz/GDGraph-1.52/Graph.pm#USAGE

上显示的格式不同

当示例显示ArrayRef的ArrayRef时,您将ArrayRef传递给 - >图:

[
  ['Desc1','Desc2'],
  [250000, 350000],
]

我建议提取绘图部分并使用静态数据进行尝试,直到获得工作结果。然后将其复制回您的脚本并将静态数据替换为您的数据,例如:

#!/usr/bin/perl
use GD::Graph::pie;
my $graph = GD::Graph::pie->new(300, 300);
    $graph->set(
    title => 'Umsatzverteilung Filialen',
    ) or die $graph->error;
my @diagarray = (
    ['Title1', 'Title2', ],
    [ 100, 200 ],
);
my $gd = $graph->plot(\@diagarray) or die $graph->error;
my $format = $graph->export_format;
print header("image/$format");
binmode STDOUT;
print $graph->plot(\@diagarray)->$format();

同时检查错误消息中报告的行。你的每一个 - >情节调用可能都是原因。

另外两条评论:

  1. 没有(!)代码应该在脚本的 use 行中,因为它们是在编译时处理的,而代码是在运行时运行的。混合不会损害您的脚本,但看起来像我的$ DBH = DBI-> connect('DBI:CSV:'); 将在使用CGI :: Carp
  2. 打印来自脚本的HTML源代码可以用于测试和学习,但不应该在生产环境中完成,因为它会使维护更加困难。尝试使用Template :: Toolkit或其他东西。

答案 1 :(得分:0)

将两个数组引用放入@diagarray与你如何推动标量输入没有任何不同。

push(@diagarray,\@labels);
push(@diagarray,\@values);

但是你希望这发生在while循环之外。在while循环中你可以填充@labels和@values。两个阵列的大小必须相同。

此外,您的脚本正在尝试一次性输出HTML和饼图,这将无法正常工作,因为您的浏览器只会将其视为一块HTML。您的HTML需要在其中包含指向其他网址的“img”标记。该URL可以是相同的脚本,但具有不同的查询字符串。例如

use CGI
my $query=new CGI;
if($query->param("piechart")) {
   # print out the graph
} else {
   print "<img src=\"",$ENV{"SCRIPT_NAME"},"?piechart=1\"/>";
}

或者您可以将饼图代码拆分为完全独立的脚本,但这使得维护起来不那么容易,因为如果数据中的读取代码发生了变化,您必须更新两个脚本。