如何让我的GD :: Graph自动更新?

时间:2017-06-22 20:50:49

标签: arrays perl web graph gd

我有一个混合图表,我希望我的数据集能够从具有工作周的表格自动更新与预期数量(条形图)和两个预测示例(行)。如何让@data自动更新图表,以便不必手动输入?

以下是我一直在使用的内容: (为了使示例更容易,表格是第一行的数据“W25”......和第三行,也就是第一行,最后一个数字是6.4。我稍后会处理其他的并暂时让他们硬编码。)

在网页上生成的表格示例:

print "<p>\n";
print "<TABLE BORDER=1>\n";
print "<caption>Projected Weekly Output</caption>\n";
print "<TR><TH>WW<TH>Wafers\n";
foreach $ww (sort keys %ww_proj_hash)
 {
$qty_outs = $ww_proj_hash{$ww};
print "<TR><TD>$ww <TD align=center>$qty_outs\n";
}
print "</TABLE><p>\n";

$ ww是第1行,$ qty_outs是第3行,产生的结果与下面的硬编码非常相似。

my @data = (
  [ "W25",  "W26",   "W27",  "W28",  "W29",   "W30",   "W31",  "W32",  "W33", "W34", "W35"],
  [     1,         2,     2.8,    3.6,      4,           5,     5.5,      6,    7,  7.5, 8  ],
  [     1,         2,     2.8,    3.6,      4.4,         5.6,     6.4               ],
  [     1,      1.95,     2.7,    3.4,    3.7,         4.7,       5,      5.5        ],
  );


my $graphmixed = GD::Graph::mixed->new (500,350);

$graphmixed->set(
     x_label         => 'X Label',
     y_label         => 'Y label',
     title           => 'Projected Supply vs. Request',

     t_margin        => 5,
     b_margin        => 2,
     l_margin        => 5,
     r_margin        => 5,

     y_min_value     => 0,
     y_max_value     => 8,
     y_tick_number   => 8,
     y_label_skip    => 3,
     cumulate        => 1,

     types           => [qw(bars lines lines)],
     dclrs           => [qw(#4f81bd #98B954 #BE4B57)],
     borderclrs      => [qw(black)],
     fgclr           => black,
     textclr         => black,
     labelclr        => black,
     axislabelclr    => black,

     y_long_ticks      => 1,
     line_width      => 4,
     bar_spacing     => 10,
     transparent     => 0,
) or warn $graphmixed->error;


$tmp_trend_file = 'graphmixed.png';
open(IMG, ">$tmp_trend_file") or die $!;
binmode IMG;
print IMG $graphmixed->plot(\@data)->png();
close IMG;  
print "<p><img src=$tmp_trend_file border=1><p>\n";

1 个答案:

答案 0 :(得分:1)

我不希望对此投票多,但最简单的方法是在HTML的头部添加meta元素

<meta http-equiv="refresh" content="10" />

这使浏览器在content属性中的秒数后刷新页面,因此您的服务器代码将执行并向浏览器发送新页面

这是不鼓励的,因为当用户打字时意外刷新页面的UI设计很糟糕,但听起来就像你想要的那样

如果您想“正确”执行此操作,并且可能仅在数据更改时更新页面,那么您需要编写一些可以更少破坏性地更新显示的AJAX代码