0

我正在使用来自 PEAR 的名为 Image_Graph 的 PHP 图形库来绘制由条形表示的数据点。当有多个数据点时,图表看起来很好,但是当只有一个数据点时,它看起来像这样:

http://img594.imageshack.us/img594/2944/screenshot20100715at528s.png

有没有其他人在使用 PEAR 的 Image_Graph 之前遇到过这个问题?有谁知道修复?我尝试使用最新版本的 Image_Graph 以及来自 SVN 的副本。

这是我的图形代码:

public function drawGraph() {
    $canvas =& Image_Canvas::factory('png', array('width' => 775, 'height' => 410, 'antialias' => true));
    $graph =& Image_Graph::factory('graph', $canvas);

    $font =& $graph->addNew('ttf_font', 'lib/fonts/Helvetica_Neue.ttf'); 
    $font->setSize(12);
    $graph->setFont($font);

    $plotarea =& $graph->addNew('plotarea');
    $dataset =& Image_Graph::factory('dataset');

    foreach ($this->getResults() as $res) {   
     $dataset->addPoint($res['name'], $res['value']);
    }

    $plot =& $plotarea->addNew('bar', &$dataset);

    $axisTitle = $this->_resultType->getName() . " (" . $this->_resultType->getUnits() . ")";
    $axisY =& $plotarea->getAxis(IMAGE_GRAPH_AXIS_Y);
    $axisY->setTitle($axisTitle, 'vertical');

    $filename = $this->_getFilename();
    return ($graph->done(array('tohtml' => 'true',
      'filename' => GRAPHS_DIR . $filename )));
}

我认为这一定是 Image_Graph 的一个错误,但我不确定它可能在哪里。

谢谢你的帮助!

4

1 回答 1

0

不知道你是否还需要答案:)

如果只有一个值 Image_graph 在 Y 轴上方绘制条形图。

很高兴知道 $this->getResults() 包含什么,我想 'name' 是一个字符串,而数组类似于array('name' => '33_Toshiba_pPVT_16GB', 'value' => 16.66). 在 X 轴上有一个字符串将产生一个类别 X 轴。您可以在填充 $dataset 后添加一个虚拟值来解决这个问题

if( count($this->getResults()) == 1 )
  $dataset->addPoint('', 0);

应该这样做,但是如果 x 轴是线性的('name' 是一个数字),则强制设置一个最小和最大 x 轴值,并且条形将很好地显示。

$axisX =& $plotarea->getAxis(IMAGE_GRAPH_AXIS_X);
$axisX->forceMinimum(1);
$axisX->forceMaximum(3);

或者,如果您想编辑 Image_Graph 代码,这里有一个修复程序 http://pear.php.net/bugs/bug.php?id=7423

PS:我只能通过替换来让你的例子工作

$plot =& $plotarea->addNew('bar', &$dataset);

$plot =& $plotarea->addNew('bar', array(&$dataset));
于 2010-08-30T07:33:45.640 回答