0

PEAR の Image_Graph という PHP グラフ作成ライブラリを使用して、バーで表されるデータの点をグラフ化しています。複数のデータポイントがある場合、グラフはきれいに見えますが、データポイントが 1 つしかない場合は次のようになります。

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

まだ答えが必要かどうかわかりません:)

値が 1 つしかない場合、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 に答える