「Image_Graph」を使ってy軸の数値が反転したグラフを作成する

昨日の問題を解決したので報告。

 1┼
  │
 5┼
  │
10└┼-┼-┼-┼-┼
     1  2  3  4  5


上記のようなレイアウトのグラフが作れないという問題だったが、グラフを2個重ねることによって解決できたので報告。
(ソースをいじれば1個のグラフでいけそうだったけど、面倒くさかったのでやめました)


作り方

  1. 同じ線グラフを2個作る(AとBを作る)
  2. 片方の線グラフ(B)の線を消す
  3. Aのx線を消す
  4. Bのy線を消す
  5. Aのグラフをy軸に対して反転


あとはpadding等で位置を調整してあげればOKです。

こんな感じになります。


以下ソース

<?php
include_once('Image/Graph');
// create the graph
$Graph =& Image_Graph::factory('graph', array(400, 300));

// add a TrueType font
//$Font =& $Graph->addNew('font', 'Gothic');
// set the font size to 11 pixels
//$Font->setSize(10);

//$Graph->setFont($Font);

// setup the plotarea, legend and their layout
$Graph->add(
     $Plotarea1 = Image_Graph::factory('plotarea')
);
$Graph->add(
     $Plotarea2 = Image_Graph::factory('plotarea')
);   

$Dataset1 =& Image_Graph::factory('dataset');
$Dataset1->addPoint('a', 19);
$Dataset1->addPoint('b', 12);
$Dataset1->addPoint('c', 16);
$Dataset1->addPoint('d', 7);
$Dataset1->addPoint('e', 21);

$Plot1 =& $Plotarea1->addNew('line', array(&$Dataset1));
$Plot1->setLineColor('red');                  
$Plotarea1->hideAxis('x');
$Plotarea1->setAxisPadding(20, 'left');
$Plotarea1->setAxisPadding(30, 'bottom');

$AxisY1 =& $Plotarea1->getAxis('y');
$AxisY1->setInverted(true);
$AxisY1->forceMaximum(25);

$Plot2 =& $Plotarea2->addNew('line', array(&$Dataset1));
$Plot2->hide();
$Plotarea2->hideAxis('y');
$Plotarea2->setAxisPadding(30, 'left');

// output the Graph
$Graph->done();
?>