/** * Формирование графика. * * Функция формирует, а затем записывает в файл ($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; }
$group->axis->bottom->title->set("Axis des X : Quarante-deux plus un"); $group->axis->bottom->title->setBackgroundColor(new Color(255, 255, 255, 25)); $group->axis->bottom->title->setPadding(1, 0, 0, 0); $group->axis->top->title->set("Axis des X : Treize plus douze"); $group->axis->top->title->setBackgroundColor(new Color(240, 200, 197, 25)); $group->axis->top->title->setPadding(1, 0, 0, 0); $count = mt_rand(2, 4); for ($n = 0; $n < $count; $n++) { $x = array(); for ($i = 0; $i < 10; $i++) { $x[] = round(cos($i * M_PI / 10) * mt_rand(-20, 100)); } $plot = new LinePlot($x); $plot->setColor(color()); $plot->setFillColor(color(90)); $plot->setXAxis(mt_rand(0, 1) ? PLOT_BOTTOM : PLOT_TOP); $plot->setYAxis(mt_rand(0, 1) ? PLOT_LEFT : PLOT_RIGHT); $plot->label->set($x); $plot->label->setColor(color(0)); if ($n % 2 === 0) { $plot->label->setBackgroundColor(new Color(mt_rand(220, 240), mt_rand(220, 240), mt_rand(220, 240), mt_rand(15, 35))); } $plot->label->setPadding(1, 0, 0, 0); $group->add($plot); $group->legend->add($plot, str_repeat("#" . ($n + 1), mt_rand(1, 2)), $n % 2 ? LEGEND_LINE : LEGEND_BACKGROUND); } $group->legend->setColumns(2); $group->legend->border->hide(); $group->legend->setSpace(20); $group->legend->setBackgroundColor(new Color(245, 255, 255)); $group->setPadding(NULL, 130, NULL, NULL);
$group = new PlotGroup(); $group->setXAxisZero(FALSE); $group->grid->setType(LINE_DASHED); $group->setBackgroundColor(new Color(197, 180, 210, 80)); $group->setPadding(40, NULL, 20, NULL); $group->axis->left->setLabelNumber(8); $group->axis->left->setLabelPrecision(1); $group->axis->left->setTickStyle(TICK_OUT); $x = array(NULL); for ($i = 1; $i < 10; $i++) { $x[] = cos($i * M_PI / 8) - 1; } $plot = new LinePlot($x); $plot->setXAxis(PLOT_TOP); $plot->setColor(new Color(40, 40, 150, 10)); $plot->setFillColor(new Color(40, 40, 150, 90)); $plot->mark->setType(MARK_BOOK); $plot->mark->move(mt_rand(0, 10), mt_rand(0, 10)); $group->add($plot); $x = array(NULL, NULL, NULL); for ($i = 8; $i < 14; $i++) { $x[] = cos($i * M_PI / mt_rand(2, 8)) / 2 - 0.2; } $x[] = NULL; $plot = new LinePlot($x); $plot->setXAxis(PLOT_TOP); $plot->setColor(new Color(120, 120, 30, 10)); $plot->setFillColor(new Color(120, 120, 30, 90)); $group->add($plot); $graph->add($group); $graph->draw();
return new Color(mt_rand(20, 180), mt_rand(20, 180), mt_rand(20, 180), $a); } function label($value) { return $value . ' %'; } $graph = new Graph(400, 400); $graph->setTiming(TRUE); $graph->setAntiAliasing(TRUE); $x = array(); for ($i = 0; $i < 5; $i++) { $x[] = mt_rand(-20, 100); } $plot = new LinePlot($x); $plot->setBackgroundColor(color(80)); $plot->setXAxis(PLOT_BOTH); $plot->setYAxis(PLOT_BOTH); $plot->setColor(color()); $plot->setStyle(LINE_DOTTED); $plot->grid->hideHorizontal(TRUE); $plot->grid->setBackgroundColor(new Color(235, 235, 180, 60)); $plot->yAxis->setLabelNumber(mt_rand(0, 10)); $plot->yAxis->setLabelPrecision(1); $plot->xAxis->label->hideFirst(TRUE); $plot->xAxis->label->hideLast(TRUE); $plot->label->set($x); $plot->label->move(0, mt_rand(0, 20)); $plot->label->setCallbackFunction('label'); $plot->label->setColor(color(0)); $plot->label->setBackgroundColor(new Color(mt_rand(200, 240), mt_rand(200, 240), mt_rand(200, 240), mt_rand(0, 20))); $plot->label->border->setColor(color());
$group->axis->{$axis}->setLabelNumber(mt_rand(0, 10)); $group->axis->{$axis}->setLabelPrecision(1); } foreach (array('top', 'bottom') as $axis) { $group->axis->{$axis}->label->hideLast(TRUE); $group->axis->{$axis}->label->hideFirst(TRUE); $group->axis->{$axis}->setTickInterval(mt_rand(17, 23)); $group->axis->{$axis}->setLabelInterval(2); } for ($n = 0; $n < 2; $n++) { $x = array(); for ($i = 0; $i < 500; $i++) { $x[] = cos($i * M_PI / 500) / ($n + 1) * mt_rand(800, 1200) / 1000; } $plot = new LinePlot($x); $plot->setColor(color()); $plot->setFillColor(color(40)); $plot->setXAxis($n % 2 ? 'top' : 'bottom'); $plot->setYAxis($n % 2 ? 'left' : 'right'); $group->add($plot); $group->legend->add($plot, "Line #" . ($n + 1), $n ? LEGEND_LINE : LEGEND_BACKGROUND); } $group->legend->border->setColor(color(0)); $group->legend->setTextColor(color(0)); $group->legend->setTextFont(new PHPFont(mt_rand(1, 3))); $group->legend->setPadding(3, 3, 3, 3); $group->legend->setRows(1); $group->legend->setAlign(LEGEND_LEFT, LEGEND_BOTTOM); $group->legend->setPosition(0.16, 0.86); $graph->add($group); $graph->draw();
} for ($n = 0; $n < 4; $n++) { $x = array(); for ($i = 0; $i < 50; $i++) { $x[] = (cos($i * M_PI / 100) / ($n + 1) * mt_rand(700, 1300) / 1000 - 0.5) * ($n % 2 ? -0.5 : 1) + ($n % 2 ? -0.4 : 0); } $plot = new LinePlot($x, mt_rand(0, 1) ? LINEPLOT_LINE : LINEPLOT_MIDDLE); $plot->setColor(color()); $plot->setFillGradient(new LinearGradient(color(60), color(60), 90)); $y = array(); foreach ($x as $v) { $y[] = sprintf("%.2f", $v); } $plot->label->set($y); $plot->label->setColor(color(0)); $plot->label->setBackgroundColor(new Color(mt_rand(220, 240), mt_rand(220, 240), mt_rand(220, 240), mt_rand(10, 20))); $plot->label->setPadding(1, 0, 0, 0); $plot->label->setInterval(12); $plot->label->setFont(new Tuffy(6)); $plot->setXAxis(PLOT_BOTTOM); $plot->setYAxis(PLOT_LEFT); $group->add($plot); $group->legend->add($plot, "Line #" . ($n + 1)); } $group->legend->setAlign(LEGEND_CENTER, LEGEND_TOP); $group->legend->setPosition(0.87, 0.1); $graph->shadow->setSize(mt_rand(10, 20)); $graph->shadow->setPosition(mt_rand(1, 4)); $graph->shadow->smooth(mt_rand(0, 1) ? TRUE : FALSE); $graph->add($group); $graph->draw();