Главная | Контакты | Настройки СМЕНИТЬ ПАЛИТРУ:

Главная > Программирование > PHP

Создание графиков с помощью pChart

Библиотека

pChartЗагрузить библиотеку можно на страничке Downloads на официальном сайте. Текущая версия этой библиотеки имеет номер 1.27.

Распространяется эта библиотека под лицензией GNU General Public License, как написано в файле pChart/pChart.class самой библиотеки, любой из версий 1, 2 или 3 или любой другой поздней версии.

Установка

Для установки достаточно распаковать архив в текущую папку. Появится несколько файлов с примерами, а также папки Cache, Fonts, pChart, Sample и tmp. В документации на сайте разработчиков я не нашел требований к PHP. Я тестировал на версии 5.2.13 и могу сказать, что проблем для этой версии нет никаких. Кроме самого PHP нужно еще расширение для работы с GD.

Создание графика

Для создания графика возьмем данные Российской фондовой биржи за месяц:

26.03 1519.87 1768.17
25.03 1515.04 1759.00
24.03 1514.58 1751.44
23.03 1524.96 1758.25
22.03 1525.59 1747.47
19.03 1544.71 1751.63
18.03 1558.80 1749.85
17.03 1563.46 1741.91
16.03 1536.79 1723.57
15.03 1514.40 1711.69
12.03 1534.68 1704.55
11.03 1504.04 1679.94
10.03 1501.40 1660.44
09.03 1502.70 1645.67
05.03 1508.21 1649.88
04.03 1470.41 1611.98
03.03 1460.20 1593.97
02.03 1445.62 1576.33
01.03 1429.77 1569.23
27.02 1410.85 1572.03
26.02 1390.25 1534.67

Сохранив эти данные в файле с именем rts.txt, напишем небольшую функцию, которая вытащит данные из файла.

Вот эта функция

/**
 * @return array
 */
function getdata($file)
{
    if (file_exists($file)) {
 
        $lines = file($file);
        $data = array('date' => array(), 'rts' => array(),
            'rts2' => array());
        foreach ($lines as $line) {
            $tmp = explode(' ', trim($line));
            $data['date'][] = $tmp[0];
            $data['rts'][] = trim($tmp[1]);
            $data['rts2'][] = trim($tmp[2]);
        }
 
        return $data;
    } else {
        return false;
    }
}

Теперь напишем код, который выведет график в браузер.
pchart.php

AddPoint($d['rts'],"Serie1");
$DataSet->AddPoint($d['rts2'],"Serie2");
$DataSet->AddPoint($d['date'],"Serie3");
//устанавливаем точки с датами
//на ось абсцисс
$DataSet->SetAbsciseLabelSerie("Serie3");
//помечаем данные как предназначеные для
//отображения
$DataSet->AddSerie("Serie1");
$DataSet->AddSerie("Serie2");
//устанавливаем имена
$DataSet->SetSerieName(mb_convert_encoding(
"Индекс РТС",'utf-8','windows-1251'), "Serie1");
$DataSet->SetSerieName(mb_convert_encoding(
"Индекс РТС2",'utf-8','windows-1251'), "Serie2");
 
//создаем график шириной в 1000 и высотой в 500 px
$graph = new pChart(1000,500);
//устанавливаем шрифт и размер шрифта
 $graph->setFontProperties("Fonts/tahoma.ttf",10);
 //координаты левой верхней вершины и правой нижней
 //вершины графика
 $graph->setGraphArea(85,30,950,400);
 //прорисовываем фон графика
 $graph->drawGraphArea(255,255,255,true);
 //устанавливаем данные для графиков
 $graph->drawScale($DataSet->GetData(),
         $DataSet->GetDataDescription(),
         SCALE_NORMAL,150,150,150,true,0,2,false,
         1);
 //рисуем сетку для графика
 $graph->drawGrid(4,true,230,230,230,50);
 
 //прорисовываем линейные графики
 $graph->drawLineGraph($DataSet->GetData(),
         $DataSet->GetDataDescription());
 
  //Пишем заголовок
 $graph->setFontProperties("pChart/Fonts/tahoma.ttf",10);
 $graph->drawTitle(480,22,
         mb_convert_encoding("Индексы РТС",
                 'utf-8','windows-1251'),
         50,50,50,-1,-1,true);
 
 //выводим в браузер
 $graph->Stroke();
 
/**
 * @return array
 */
function getdata($file)
{
    if (file_exists($file)) {
 
        $lines = file($file);
        $data = array('date' => array(), 'rts' => array(),
            'rts2' => array());
        foreach ($lines as $line) {
            $tmp = explode(' ', trim($line));
            $data['date'][] = $tmp[0];
            $data['rts'][] = trim($tmp[1]);
            $data['rts2'][] = trim($tmp[2]);
        }
 
        return $data;
    } else {
        return false;
    }
}
?>

В результате получим график индексов фондовой биржи

График индексов фондовой биржи с помощью pChart

Не плохой график, правда?

Основная система построения графиков состоит из двух классов. Для хранения данных используется класс pData, для создания графика – класс pChart.

Для добавления точек в объект класса pData используется метод


void pData::AddPoint(mixed $Value, string $Serie= «Serie1»,
 string $Description = «»)

Все аргументы, кроме первого необязательные:

  • mixed $Value – данные, которые устанавливаются для точки. Если передан массив с данными, то устанавливаются сразу несколько точек;
  • string $Serie – название серии данных, к которой добавляется точка. По умолчанию добавляется к серии Serie1;
  • string $Description – описание точки. По умолчанию – пустое.

Для установки точек одной серии на ось абсцисс, используется метод

void pData::SetAbsciseLabelSerie(string $SerieName = «Name»)

Единственный аргумент не обязателен:

  • string $SerieName – наименование серии точек. По умолчанию имеет значение «Name».

Чтобы указать, какие из серий точек будут участвовать в построении графиков нужно вызвать метод

void pData::AddSerie(string $SerieName = «Serie1»)

Аргумент

  • string $SerieName – наименование серии точек. По умолчанию имеет значение «Serie1».

Если нужно добавить все серии точек, то можно вызвать метод

void pData::AddAllSeries()

Метод

void pData::SetSerieName(string $Name,
string $SerieName = «Serie1»)

устанавливает описание для серии точек. Это описание может быть использовано для создания легенды. Первый аргумент обязателен:

  • string $Name – описание серии точек;
  • string $SerieName – имя серии точек, для которой устанавливается описание. Аргумент не обязателен.

Теперь рассмотрим класс pChart, который, собственно и рисует график. Конструктор этого класса

pChart pChart::pChart(int $XSize, int $YSize)

содержит два обязательных аргумента:

  • int $XSize – ширина создаваемого изображения;
  • int $YSize – высота создаваемого изображения.

Для установки свойств шрифтов используется метод

void pChart::setFontProperties(string $FontName,
int $FontSize)

У этого метода оба аргумента обязательны:

  • string $FontName – путь к файлу с TTF-шрифтом. В папке Fonts лежат TTF-шрифты. Из них кириллицу поддерживает только tahoma;
  • int $FontSize – размер шрифта.

Метод

void pChart::setGraphArea(int $X1, int Y1, int X2, int Y2)

устанавливает координаты верхнего левого угла и правого нижнего угла графика. Все аргументы обязательны:

  • int $X1 – Х-координата верхнего левого угла графика;
  • int $Y1 – Y-координата верхнего левого угла графика;
  • int $X2 – X-координата нижнего правого угла графика;
  • int $Y2 – Y-координата нижнего правого угла графика;

Для установки цвета фона графика используем метод

void pChart::drawGraphArea(int $R, int $G, int $B,
bool $Stripe = false)

Цвет устанавливается в цветовой системе RGB. Все аргументы, кроме последнего, обязательны:

  • int $R – число красной составляющей в цветовой модели;
  • int $G – число зеленой составляющей в цветовой модели;
  • int $B – число синей составляющей в цветовой модели;
  • bool $Stripe – если этот параметр установить в true, то фон графика будет заштрихован. По умолчанию установлен в false.

Метод

void pChart::drawScale(array $Data, array $DataDescription,
int $ScaleMode, int $R, int $G, int $B, bool $DrawTicks=true,
int $Angle=0, int $Decimals=1, bool $WithMargin=false,
int $SkipLabels=1, bool $RightScale=false)

прочерчивает обе оси и записывает на них значения. Аргументов целая куча:

  • array $Data – данные для прорисовки осей. Можно получить из объекта класса pData (см. выше) следующим образом $pDataObj->GetData();
  • array $DataDescription – описания для осей. Можно получить из объекта класса pData посредством вызова метод $pDataObj->GetDataDescription();
  • int $ScaleMode – указывает вид шкалы для оси ординат. Может быть одной из констант:
    • SCALE_NORMAL – шкала устанавливается в значения между минимальным и максимальным значение серий;
    • SCALE_START0 – то же, что и предыдущее, но только минимальное устанавливается в 0;
    • SCALE_ADDALL – шкала вычисляется по совокупным значениям минимальных и максимальных значений серий;
    • SCALE_ADDALLSTART0 – то же, что и предыдущее, но минимальное значение устанавливается в 0;
  • int $R – число красной составляющей цвета оси в цветовой модели RGB;
  • int $G – число зеленой составляющей цвета оси в цветовой модели RGB;
  • int $B – число синей составляющей цвета оси в цветовой модели RGB;
  • bool $DrawTicks – если установлена в false, то будет отключена маркировка осей. Параметр не обязателен. По умолчанию установлен в true;
  • int $Angle – угол поворота маркировки оси. Параметр не обязателен. По умолчанию установлен в 0;
  • int $Decimals – число десятичных значений, которые необходимо сохранить на оси. Параметр не обязателен. По умолчанию установлен в 1;
  • bool $WithMargin – если установлен в false, то график будет начерчен на всю ширину. Если в true, то будет оставлен небольшой зазор. Параметр не обязателен. По умолчанию установлен в false;
  • int $SkipLabels – устанавливает число точек, через которое устанавливаются маркеры по оси абсцисс (оси Х). Параметр не обязателен. По умолчанию имеет значение 1;
  • bool $RightScale – если установлено в true, то ось ординат (ось Y) будет расположена справа, если в false – то слева. Параметр не обязателен. По умолчанию имеет значение false.

Метод

void pChart::drawGrid(int $LineWidth, bool $Mosaic=true,
int $R=220, int $G=220, int $B=220, int $Alpha=255)

прорисовывает сетку на фоне графика. Аргументы:

  • int $LineWidth – ширина линии сетки в пикселах;
  • bool $Mosaic – если установлено в true, то прорисовывается серая зона между двумя линиями. Параметр не обязателен. По умолчанию имеет значение true;
  • int $R – число красной составляющей цвета линии в цветовой модели RGB. Параметр не обязателен. По умолчанию имеет значение 220;
  • int $G - число зеленой составляющей цвета линии в цветовой модели RGB. Параметр не обязателен. По умолчанию имеет значение 220;
  • int $B - число синей составляющей цвета линии в цветовой модели RGB. Параметр не обязателен. По умолчанию имеет значение 220;
  • int $Alpha – коэффициент прозрачности. Параметр не обязателен. По умолчанию имеет значение 255.

С помощью метода

void pChart::drawLineGraph(array $Data,
array $DataDescription)

прорисовывается линейный график, используя все зарегистрированные серии точек. Аргументы:

  • array $Data – данные для прорисовки графиков. Можно получить из объекта класса pData (см. выше) следующим образом $pDataObj->GetData();
  • array $DataDescription – описания для грфиков. Можно получить из объекта класса pData посредством вызова метод $pDataObj->GetDataDescription();

Для прорисовки заголовка графика используется метод

void pChart::drawTitle(int $XPos, int $YPos, string $Value,
int $R, int $G, int $B, int $XPos2=-1, int $YPos=-1,
bool $Shadow=false)

Аргументы:

  • int $XPos – координата X начала заголовка;
  • int $YPos – координата Y начала заголовка;
  • string $Value – текст заголовка;
  • int $R – число красной составляющей цвета заголовка в цветовой модели RGB;
  • int $G – число зеленой составляющей цвета заголовка в цветовой модели RGB;
  • int $B – число синей составляющей цвета заголовка в цветовой модели RGB;
  • int $XPos2 – координата X конца заголовка. Параметр не обязателен. По умолчанию имеет значение -1 (отключен);
  • int $YPos2 – координата Y конца заголовка. Параметр не обязателен. По умолчанию имеет значение -1 (отключен);
  • bool $Shadow – если установлен в true, для заголовка прорисовывается тень. Параметр не обязателен. По умолчанию имеет значение false.

Метод

void pChart::Stroke()

выводит в браузер изображение.

Если нужно сохранить изображение в файл, то нужно использовать метод

void pChart::Render(string $FileName)

Аргумент:

  • string $FileName – имя файла, в который нужно сохранить изображение с графиком. Права для записи должны быть настроены корректно.

Заключение
Данная библиотека представляет настолько много различных методов для создания графиков, что я не успел рассказать даже о половине из них.


Главная > Программирование > PHP