Example #1
0
/**
* Формирование графика.
*
* Функция формирует, а затем записывает в файл ($File) изображение графика по
* переданным пользователем данным($Lines). Данная функция может рисовать как одиночные,
* так и многолинейные графики.Исходными данными является массив, элементы которого также
* является массивами исходных данных для соответствующих графиков (данная структура
* сохраняется и для одиночных графиков!). Цвет каждой линии передается в массиве
* $Colors, ключи которого совпадают с ключами массива исходных данных. Цвет задается
* шестнадцатиричным кодом цвета (например, 0x000000 для черного цвета).
*
* @param string  <заголовок диаграммы>
* @param string  <полный путь с именем файла-результата>
* @param array   <исходные данные>
* @param array   <подписи к оси Ox>
* @param array   <цвета линий>
*/
function Artichow_Line($Name, $File, $Lines, $Labels, $Colors)
{
    #-----------------------------------------------------------------------------
    $Graph = new Graph(1000, 300);
    $Graph->setDriver('gd');
    $Graph->setAntiAliasing(TRUE);
    #-----------------------------------------------------------------------------
    $Graph->title->set($Name);
    $Graph->title->setFont(new Tuffy(15));
    $Graph->title->move(0, -5);
    #-----------------------------------------------------------------------------
    if (Count($Lines) > 1) {
        #---------------------------------------------------------------------------
        $Group = new PlotGroup();
        $Group->setPadding(40, 40);
        $Group->setBackgroundColor(new Color(240, 240, 240));
    }
    #-----------------------------------------------------------------------------
    $IsSetLabel = FALSE;
    #-----------------------------------------------------------------------------
    foreach ($Lines as $LineID => $Line) {
        #---------------------------------------------------------------------------
        $Plot = new LinePlot($Line);
        $Color = Color_RGB_Explode($Colors[$LineID]);
        $Plot->setColor(new Color($Color['R'], $Color['G'], $Color['B']));
        $Plot->setThickness(1);
        $Plot->setBackgroundGradient(new LinearGradient(new Color(240, 240, 240), new Color(255, 255, 255), 0));
        $Plot->setFillGradient(new LinearGradient(new LightOrange(10), new VeryLightOrange(90), 90));
        $Plot->setPadding(50, 50, 50, 50);
        #---------------------------------------------------------------------------
        $Plot->mark->setType(Mark::CIRCLE);
        $Plot->mark->setSize(5);
        #---------------------------------------------------------------------------
        $Plot->label->set($Line);
        $Plot->label->move(0, -15);
        $Plot->label->setBackgroundGradient(new LinearGradient(new Color(250, 250, 250, 10), new Color(255, 200, 200, 30), 0));
        $Plot->label->border->setColor(new Color(20, 20, 20, 20));
        $Plot->label->setPadding(2, 2, 2, 2);
        #---------------------------------------------------------------------------
        if (Count($Lines) < 2) {
            #-------------------------------------------------------------------------
            $Plot->xAxis->setLabelText($Labels);
            $Plot->yAxis->setLabelPrecision(1);
        } else {
            #-------------------------------------------------------------------------
            if (!$IsSetLabel) {
                #-----------------------------------------------------------------------
                $Plot->setXAxis(Plot::BOTTOM);
                $IsSetLabel = TRUE;
            }
        }
        #---------------------------------------------------------------------------
        if (Count($Lines) > 1) {
            $Group->add($Plot);
        }
        #---------------------------------------------------------------------------
        if (Count($Lines) > 1) {
            #-------------------------------------------------------------------------
            $Graph->add($Group);
            #-------------------------------------------------------------------------
            $Group->axis->bottom->setTickStyle(0);
            $Group->axis->bottom->setLabelText($Labels);
        } else {
            $Graph->add($Plot);
        }
    }
    #-----------------------------------------------------------------------------
    $Graph->draw($File);
    #-----------------------------------------------------------------------------
    return TRUE;
}