|
- <?php
-
- // mPDF 4.5.009
- define("FF_USERFONT", 15); // See jpgraph_ttf.inc.php for font IDs
- global $JpgUseSVGFormat;
- $JpgUseSVGFormat = true;
-
- //======================================================================================================
- // DELETE OLD GRAPH FILES FIRST - Housekeeping
- // First clear any files in directory that are >1 hrs old
- $interval = 3600;
- if ($handle = opendir(_MPDF_PATH . 'graph_cache')) {
- while (false !== ($file = readdir($handle))) {
- if (((filemtime(_MPDF_PATH . 'graph_cache/' . $file) + $interval) < time()) && ($file != "..") && ($file != ".")) {
- @unlink(_MPDF_PATH . 'graph_cache/' . $file); // mPDF 4.0
- }
- }
- closedir($handle);
- }
- //==============================================================================================================
- // LOAD GRAPHS
-
- include_once(_JPGRAPH_PATH . 'jpgraph.php');
- include_once(_JPGRAPH_PATH . 'jpgraph_line.php' );
- include_once(_JPGRAPH_PATH . 'jpgraph_log.php' );
- include_once(_JPGRAPH_PATH . 'jpgraph_scatter.php' );
- include_once(_JPGRAPH_PATH . 'jpgraph_regstat.php' );
- include_once(_JPGRAPH_PATH . 'jpgraph_pie.php');
- include_once(_JPGRAPH_PATH . 'jpgraph_pie3d.php');
- include_once(_JPGRAPH_PATH . 'jpgraph_bar.php');
- include_once(_JPGRAPH_PATH . 'jpgraph_radar.php');
-
- require_once __DIR__ . '/MpdfException.php';
-
- function print_graph($g, $pgwidth)
- {
- $splines = false;
- $bandw = false;
- $percent = false;
- $show_percent = false;
- $stacked = false;
- $h = false;
- $show_values = false;
- $hide_grid = false;
- $hide_y_axis = false;
-
- if (isset($g['attr']['TYPE']) && $g['attr']['TYPE']) {
- $type = strtolower($g['attr']['TYPE']);
- }
- if (!in_array($type, array('bar', 'horiz_bar', 'line', 'radar', 'pie', 'pie3d', 'xy', 'scatter'))) {
- $type = 'bar';
- } // Default=bar
-
- if (isset($g['attr']['STACKED']) && $g['attr']['STACKED']) {
- $stacked = true;
- } // stacked for bar or horiz_bar
- if (isset($g['attr']['SPLINES']) && $g['attr']['SPLINES'] && $type == 'xy') {
- $splines = true;
- } // splines for XY line graphs
- if (isset($g['attr']['BANDW']) && $g['attr']['BANDW']) {
- $bandw = true;
- } // black and white
- if (isset($g['attr']['LEGEND-OVERLAP']) && $g['attr']['LEGEND-OVERLAP']) {
- $overlap = true;
- } // avoid overlap of Legends over graph (line, bar, horiz_bar only)
- if (isset($g['attr']['PERCENT']) && $g['attr']['PERCENT'] && $type != 'xy' && $type != 'scatter') {
- $percent = true;
- } // Show data series as percent of total in series
- if (isset($g['attr']['SHOW-VALUES']) && $g['attr']['SHOW-VALUES']) {
- $show_values = true;
- } // Show the individual data values
- if (isset($g['attr']['HIDE-GRID']) && $g['attr']['HIDE-GRID']) {
- $hide_grid = true;
- } // Hide the y-axis gridlines
- if (isset($g['attr']['HIDE-Y-AXIS']) && $g['attr']['HIDE-Y-AXIS']) {
- $hide_y_axis = true;
- } // Hide the y-axis
- // Antialias: If true - better quality curves, but graph line will only be 1px even in PDF 300dpi
- // default=true for most except line and radar
- if (isset($g['attr']['ANTIALIAS']) && ($g['attr']['ANTIALIAS'] == '' || $g['attr']['ANTIALIAS'] == 0)) {
- $antialias = false;
- } else if (isset($g['attr']['ANTIALIAS']) && $g['attr']['ANTIALIAS'] > 0) {
- $antialias = true;
- } else if ($type == 'line' || $type == 'radar') {
- $antialias = false;
- } else {
- $antialias = true;
- }
-
- if ($g['attr']['DPI']) {
- $dpi = intval($g['attr']['DPI']);
- }
- if (!$dpi || $dpi < 50 || $dpi > 2400) {
- $dpi = 150;
- } // Default dpi 150
- $k = (0.2645 / 25.4 * $dpi);
-
- // mPDF 4.5.009
- global $JpgUseSVGFormat;
- if (isset($JpgUseSVGFormat) && $JpgUseSVGFormat) {
- $img_type = 'svg';
- $k = 1; // Overrides as Vector scale does not need DPI
- } else {
- $img_type = 'png';
- }
-
- if (isset($g['attr']['TITLE']) && $g['attr']['TITLE']) {
- $title = $g['attr']['TITLE'];
- }
-
- if (isset($g['attr']['LABEL-X']) && $g['attr']['LABEL-X']) {
- $xlabel = $g['attr']['LABEL-X'];
- } // NOT IMPLEMENTED??????
- if (isset($g['attr']['LABEL-Y']) && $g['attr']['LABEL-Y']) {
- $ylabel = $g['attr']['LABEL-Y'];
- }
-
- if (isset($g['attr']['AXIS-X']) && $g['attr']['AXIS-X']) {
- $xaxis = strtolower($g['attr']['AXIS-X']);
- }
- if (!in_array($xaxis, array('text', 'lin', 'linear', 'log'))) {
- $xaxis = 'text';
- } // Default=text
- if ($xaxis == 'linear') {
- $xaxis = 'lin';
- }
-
- if (isset($g['attr']['AXIS-Y']) && $g['attr']['AXIS-Y']) {
- $yaxis = strtolower($g['attr']['AXIS-Y']);
- }
- if (!in_array($yaxis, array('lin', 'linear', 'log', 'percent'))) {
- $yaxis = 'lin';
- } // Default=lin
- if ($yaxis == 'percent') {
- $show_percent = true;
- $yaxis = 'lin';
- } // Show percent sign on scales
- if ($yaxis == 'linear') {
- $yaxis = 'lin';
- }
-
- if ($splines) {
- $xaxis = 'lin';
- }
- $axes = $xaxis . $yaxis; // e.g.textlin, textlog, loglog, loglin, linlog (XY)
- // mPDF 4.0
- if (isset($g['attr']['cWIDTH']) && $g['attr']['cWIDTH']) {
- $w = ($g['attr']['cWIDTH'] / 0.2645);
- } // pixels
- if (isset($g['attr']['cHEIGHT']) && $g['attr']['cHEIGHT']) {
- $h = ($g['attr']['cHEIGHT'] / 0.2645);
- }
-
-
- if (isset($g['attr']['SERIES']) && strtolower($g['attr']['SERIES']) == 'rows') {
- $dataseries = 'rows';
- } else {
- $dataseries = 'cols';
- }
-
- // Defaults - define data
- $rowbegin = 2;
- $colbegin = 2;
- if ($type == 'scatter' || $type == 'xy') {
- if ($dataseries == 'rows') {
- $rowbegin = 1;
- } else {
- $colbegin = 1;
- }
- }
- $rowend = 0;
- $colend = 0;
-
- if (isset($g['attr']['DATA-ROW-BEGIN']) && ($g['attr']['DATA-ROW-BEGIN'] === '0' || $g['attr']['DATA-ROW-BEGIN'] > 0)) {
- $rowbegin = $g['attr']['DATA-ROW-BEGIN'];
- }
-
- if (isset($g['attr']['DATA-COL-BEGIN']) && ($g['attr']['DATA-COL-BEGIN'] === '0' || $g['attr']['DATA-COL-BEGIN'] > 0)) {
- $colbegin = $g['attr']['DATA-COL-BEGIN'];
- }
-
- if (isset($g['attr']['DATA-ROW-END']) && ($g['attr']['DATA-ROW-END'] === '0' || $g['attr']['DATA-ROW-END'] <> 0)) {
- $rowend = $g['attr']['DATA-ROW-END'];
- }
- if (isset($g['attr']['DATA-COL-END']) && ($g['attr']['DATA-COL-END'] === '0' || $g['attr']['DATA-COL-END'] <> 0)) {
- $colend = $g['attr']['DATA-COL-END'];
- }
-
- $nr = count($g['data']);
- $nc = 0;
- foreach ($g['data'] AS $r) {
- $cc = 0;
- foreach ($r AS $c) {
- $cc++;
- }
- $nc = max($nc, $cc);
- }
- if ($colend == 0) {
- $colend = $nc;
- } else if ($colend < 0) {
- $colend = $nc + $colend;
- }
-
- if ($rowend == 0) {
- $rowend = $nr;
- } else if ($rowend < 0) {
- $rowend = $nr + $rowend;
- }
-
- if ($colend < $colbegin) {
- $colend = $colbegin;
- }
- if ($rowend < $rowbegin) {
- $rowend = $rowbegin;
- }
-
- // if ($type == 'xy' || $type=='scatter') { $colstart=0; }
- // Get Data + Totals
- $data = array();
- $totals = array();
- for ($r = ($rowbegin - 1); $r < $rowend; $r++) {
- for ($c = ($colbegin - 1); $c < $colend; $c++) {
- if (isset($g['data'][$r][$c])) {
- $g['data'][$r][$c] = floatval($g['data'][$r][$c]);
- } else {
- $g['data'][$r][$c] = 0;
- }
- if ($dataseries == 'rows') {
- $data[($r + 1 - $rowbegin)][($c + 1 - $colbegin)] = $g['data'][$r][$c];
- $totals[($r + 1 - $rowbegin)] += $g['data'][$r][$c];
- } else {
- $data[($c + 1 - $colbegin)][($r + 1 - $rowbegin)] = $g['data'][$r][$c];
- if (isset($totals[($c + 1 - $colbegin)])) {
- $totals[($c + 1 - $colbegin)] += $g['data'][$r][$c];
- } else {
- $totals[($c + 1 - $colbegin)] = $g['data'][$r][$c];
- }
- }
- }
- }
- // PERCENT
- if ($percent && $type != 'pie' && $type != 'pie3d') {
- for ($r = 0; $r < count($data); $r++) {
- for ($c = 0; $c < count($data[$r]); $c++) {
- $data[$r][$c] = $data[$r][$c] / $totals[$r] * 100;
- }
- }
- }
- // Get Legends and labels
- $legends = array();
- $labels = array();
- $longestlegend = 0;
- $longestlabel = 0;
- if ($dataseries == 'cols') {
- if ($colbegin > 1) {
- for ($r = ($rowbegin - 1); $r < $rowend; $r++) {
- $legends[($r + 1 - $rowbegin)] = $g['data'][$r][0];
- $longestlegend = max($longestlegend, strlen($g['data'][$r][0]));
- }
- }
- if ($rowbegin > 1) {
- for ($c = ($colbegin - 1); $c < $colend; $c++) {
- $labels[($c + 1 - $colbegin)] = $g['data'][0][$c];
- $longestlabel = max($longestlabel, strlen($g['data'][0][$c]));
- }
- }
- } else if ($dataseries == 'rows') {
- if ($colbegin > 1) {
- for ($r = ($rowbegin - 1); $r < $rowend; $r++) {
- $labels[($r + 1 - $rowbegin)] = $g['data'][$r][0];
- $longestlabel = max($longestlabel, strlen($g['data'][$r][0]));
- }
- }
- if ($rowbegin > 1) {
- for ($c = ($colbegin - 1); $c < $colend; $c++) {
- $legends[($c + 1 - $colbegin)] = $g['data'][0][$c];
- $longestlegend = max($longestlegend, strlen($g['data'][0][$c]));
- }
- }
- }
- // Default sizes
- $defsize = array();
- $defsize['pie'] = array('w' => 600, 'h' => 300);
- $defsize['pie3d'] = array('w' => 600, 'h' => 300);
- $defsize['radar'] = array('w' => 600, 'h' => 300);
- $defsize['line'] = array('w' => 600, 'h' => 400);
- $defsize['xy'] = array('w' => 600, 'h' => 400);
- $defsize['scatter'] = array('w' => 600, 'h' => 400);
- $defsize['bar'] = array('w' => 600, 'h' => 400);
- $defsize['horiz_bar'] = array('w' => 600, 'h' => 500);
-
-
- // Use default ratios
- if ($w && !$h) {
- $h = $w * $defsize[$type]['h'] / $defsize[$type]['w'];
- }
- if ($h && !$w) {
- $w = $h * $defsize[$type]['w'] / $defsize[$type]['h'];
- }
- if (!$h && !$w) {
- $w = $defsize[$type]['w'];
- $h = $defsize[$type]['h'];
- }
-
-
- if (count($data) > 0 && $type) {
- $figure_file = "graph_cache/" . rand(11111, 999999999) . "." . $img_type;
- if ($bandw) {
- $colours = array('snow1', 'black', 'snow4', 'snow3', 'snow2', 'cadetblue4', 'cadetblue3', 'cadetblue1', 'bisque4', 'bisque2', 'beige');
- } else {
- $colours = array('cyan', 'darkorchid4', 'cadetblue3', 'khaki1', 'darkolivegreen2', 'cadetblue4', 'coral', 'cyan4', 'rosybrown3', 'wheat1');
- }
- $fills = array('navy', 'orange', 'red', 'yellow', 'purple', 'navy', 'orange', 'red', 'yellow', 'purple');
- $patterns = array(PATTERN_DIAG1, PATTERN_CROSS1, PATTERN_STRIPE1, PATTERN_DIAG3, PATTERN_CROSS2, PATTERN_DIAG2, PATTERN_DIAG4, PATTERN_CROSS3, PATTERN_CROSS4, PATTERN_STRIPE1);
- $markers = array(MARK_DIAMOND, MARK_SQUARE, MARK_CIRCLE, MARK_UTRIANGLE, MARK_DTRIANGLE, MARK_FILLEDCIRCLE, MARK_CROSS, MARK_STAR, MARK_X);
-
- // LEGENDS
- if ($type == 'pie' || $type == 'pie3d') {
- $graph = new PieGraph(($w * $k), ($h * $k));
- } else if ($type == 'radar') {
- $graph = new RadarGraph(($w * $k), ($h * $k));
- } else {
- $graph = new Graph(($w * $k), ($h * $k));
- }
-
- // mPDF 4.5.009
- // $graph->img->SetImgFormat($img_type) ;
- // if (strtoupper($img_type)=='JPEG') { $graph->img->SetQuality(90); }
- if ($antialias) {
- $graph->img->SetAntiAliasing();
- }
- $graph->SetShadow(true, 2 * $k);
- $graph->SetMarginColor("white");
- // TITLE
- $graph->title->Set($title);
- $graph->title->SetMargin(10 * $k);
- $graph->title->SetFont(FF_USERFONT, FS_BOLD, 11 * $k);
- $graph->title->SetColor("black");
- $graph->legend->SetLineSpacing(3 * $k);
- $graph->legend->SetMarkAbsSize(6 * $k);
- $graph->legend->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
-
- // Set GRAPH IMAGE MARGINS
- if ($type == 'pie' || $type == 'pie3d') {
- $psize = 0.3;
- $pposxabs = ($w / 2);
- $pposy = 0.55;
- if ($longestlegend) { // if legend showing
- $pposxabs -= ((($longestlegend * 5) + 20) / 2);
- }
- $pposx = ($pposxabs / $w);
- $graph->legend->Pos(0.02, 0.5, 'right', 'center');
- } else if ($type == 'radar') {
- $psize = 0.5;
- $pposxabs = ($w / 2);
- $pposy = 0.55;
- if ($longestlabel) { // if legend showing
- $pposxabs -= ((($longestlabel * 5) + 20) / 2);
- }
- $pposx = ($pposxabs / $w);
- $graph->legend->Pos(0.02, 0.5, 'right', 'center');
- } else if ($type == 'xy' || $type == 'scatter') {
- $pml = 50;
- $pmr = 20;
- $pmt = 60;
- $pmb = 50;
- $xaxislblmargin = $pmb - 30;
- $yaxislblmargin = $pml - 15;
- $graph->legend->Pos(0.02, 0.1, 'right', 'top');
- } else if ($type == 'line' || $type == 'bar') {
- $pml = 50;
- $pmr = 20;
- $pmt = 60;
- $pmb = 50;
- $xlangle = 0;
- $ll = ($longestlegend * 5); // 45 degrees 8pt fontsize
- if ($ll > 5 || ($ll > 3 && count($data) > 10)) {
- $pmb = max($pmb, $ll + 30);
- $xlangle = 50;
- }
- $xaxislblmargin = $pmb - 30;
- $yaxislblmargin = $pml - 15;
- if ($longestlabel && !$overlap) { // if legend showing
- $pmr = ((($longestlabel * 5) + 40));
- }
- $graph->legend->Pos(0.02, 0.1, 'right', 'top');
- } else if ($type == 'horiz_bar') {
- $pml = 50;
- $pmr = 20;
- $pmt = 50;
- $pmb = 45;
- $ll = ($longestlegend * 6.5); // 8pt fontsize
- $pml = max($pml, $ll + 20);
- $xaxislblmargin = $pml - 20;
- $yaxislblmargin = $pmb - 15;
- if ($longestlabel && !$overlap) { // if legend showing
- $pmr = ((($longestlabel * 5) + 40));
- }
- $graph->legend->Pos(0.02, 0.1, 'right', 'top');
- }
-
-
- // DRAW THE GRAPHS
- if ($type == 'pie') {
- $p1 = new PiePlot($data[0]);
- $p1->SetSliceColors($colours);
-
- if ($show_values) {
- $p1->value->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- if ($percent) {
- $p1->SetLabelType(PIE_VALUE_PERADJ);
- } //PIE_VAL_PER = default
- else {
- $p1->SetLabelType(PIE_VALUE_ABS);
- }
- if ($percent || $show_percent) {
- $p1->value->SetFormat("%d%%");
- } else {
- $p1->value->SetFormat("%s");
- }
- // Enable and set policy for guide-lines. Make labels line up vertically
- $p1->SetGuideLines(true);
- $p1->SetGuideLinesAdjust(1.5);
- } else {
- $p1->value->Show(false);
- }
- $p1->SetLegends($legends);
- $p1->SetSize($psize);
- $p1->SetCenter($pposx, $pposy);
- if ($labels[0]) {
- $graph->subtitle->Set($labels[0]);
- $graph->subtitle->SetMargin(10 * $k);
- $graph->subtitle->SetFont(FF_USERFONT, FS_BOLD, 11 * $k);
- $graph->subtitle->SetColor("black");
- }
- $graph->Add($p1);
- } else if ($type == 'pie3d') {
- $p1 = new PiePlot3d($data[0]);
- $p1->SetSliceColors($colours);
- if ($show_values) {
- $p1->value->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- if ($percent) {
- $p1->SetLabelType(PIE_VALUE_PERADJ);
- } //PIE_VAL_PER = default
- else {
- $p1->SetLabelType(PIE_VALUE_ABS);
- }
- if ($percent || $show_percent) {
- $p1->value->SetFormat("%d%%");
- } else {
- $p1->value->SetFormat("%s");
- }
- } else {
- $p1->value->Show(false);
- }
- $p1->SetLegends($legends);
- $p1->SetEdge();
- $p1->SetSize($psize);
- $p1->SetCenter($pposx, $pposy);
-
- if ($labels[0]) {
- $graph->subtitle->Set($labels[0]);
- $graph->subtitle->SetMargin(10 * $k);
- $graph->subtitle->SetFont(FF_USERFONT, FS_BOLD, 11 * $k);
- $graph->subtitle->SetColor("black");
- }
-
- $graph->Add($p1);
- }
- // RADAR
- else if ($type == 'radar') {
- $graph->SetSize($psize);
- $graph->SetPos($pposx, $pposy);
-
- $graph->SetTitles($legends); // labels each axis
-
- $graph->axis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->axis->title->SetMargin(5 * $k);
- $graph->axis->SetWeight(1 * $k);
- $graph->axis->HideLabels();
- $graph->axis->SetFont(FF_USERFONT, FS_NORMAL, 6 * $k);
- $graph->HideTickMarks();
-
- $group = array();
- foreach ($data AS $series => $dat) {
- $rdata = array();
- foreach ($data[$series] AS $row) {
- $rdata[] = $row;
- }
- if (count($rdata) < 3) {
- throw new MpdfException("ERROR::Graph::Cannot create a Radar Plot with less than 3 data points.");
- }
- // Create the radar plot
- $bplot = new RadarPlot($rdata);
- $bplot->mark->SetType($markers[$series]);
- $bplot->mark->SetFillColor($colours[$series]);
- $bplot->mark->SetWidth(3 * $k);
- $bplot->SetColor($colours[$series]);
- if ($series == 0) {
- $bplot->SetFillColor('lightred');
- } else {
- $bplot->SetFill(false);
- }
- $bplot->SetLineWeight(1 * $k);
- $bplot->SetLegend($labels[$series]);
- if ($bandw) {
- $bplot->SetShadow("gray5");
- }
- $graph->Add($bplot);
- }
- }
- // LINE
- else if ($type == 'line') {
- // Setup the graph.
- $graph->img->SetMargin($pml * $k, $pmr * $k, $pmt * $k, $pmb * $k); // LRTB
- $graph->SetScale($axes);
- $graph->yaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
-
- if ($ylabel) {
- $graph->yaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->yaxis->SetTitle($ylabel, 'middle');
- $graph->yaxis->SetTitleMargin($yaxislblmargin * $k);
- }
-
- $graph->yaxis->SetLabelMargin(4 * $k);
- if ($percent || $show_percent) {
- $graph->yaxis->SetLabelFormat('%d%%');
- } // Percent
- // Show 0 label on Y-axis (default is not to show)
- $graph->yscale->ticks->SupressZeroLabel(true);
- if ($hide_y_axis) {
- $graph->yaxis->Hide();
- }
- if ($hide_grid) {
- $graph->ygrid->Show(false);
- }
-
- // Setup X-axis labels
- $graph->xaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->xaxis->SetTickLabels($legends);
- $graph->xaxis->SetLabelAngle($xlangle);
- $graph->xaxis->SetLabelMargin(4 * $k);
- // X-axis title
- if ($xlabel) {
- $graph->xaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->xaxis->SetTitle($xlabel, 'middle');
- $graph->xaxis->SetTitleMargin($xaxislblmargin * $k);
- }
- foreach ($data AS $series => $rdata) {
- $bplot = new LinePlot($rdata);
- $bplot->mark->SetType($markers[$series]);
- $bplot->mark->SetFillColor($colours[$series]);
- $bplot->mark->SetWidth(4 * $k);
- if ($show_values) {
- $bplot->value->Show(); // Not if scatter
- $bplot->value->SetMargin(6 * $k);
- $bplot->value->SetColor("darkred");
- $bplot->value->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- if ($percent || $show_percent) {
- $bplot->value->SetFormat('%d%%');
- } else {
- $bplot->value->SetFormat("%s");
- }
- }
- // Set color for each line
- $bplot->SetColor($colours[$series]);
- $bplot->SetWeight(2 * $k);
- $bplot->SetLegend($labels[$series]);
- if ($bandw) {
- $bplot->SetShadow("gray5");
- }
- // Indent the X-scale so the first and last point doesn't fall on the edges
- $bplot->SetCenter();
- $graph->Add($bplot);
- }
- }
- // XY or SCATTER
- else if ($type == 'xy' || $type == 'scatter') {
- // Setup the graph.
- $graph->img->SetMargin($pml * $k, $pmr * $k, $pmt * $k, $pmb * $k); // LRTB
- $graph->SetScale($axes);
- // Setup font for axis
- $graph->yaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- // Y-axis title
- if ($labels[1]) {
- $graph->yaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->yaxis->SetTitleMargin($yaxislblmargin * $k);
- $graph->yaxis->SetTitle($labels[1], 'middle');
- }
-
-
- $graph->yaxis->SetLabelMargin(4 * $k);
- if ($percent || $show_percent) {
- $graph->yaxis->SetLabelFormat('%d%%');
- } // Percent
- // Show 0 label on Y-axis (default is not to show)
- $graph->yscale->ticks->SupressZeroLabel(true);
- // Just let the maximum be autoscaled
- $graph->yaxis->scale->SetAutoMin(0);
- if ($hide_y_axis) {
- $graph->yaxis->Hide();
- }
- if ($hide_grid) {
- $graph->ygrid->Show(false);
- }
-
- // Setup X-axis labels
- $graph->xaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- // mPDF 2.5 Corrects labelling of x-axis
- // $graph->xaxis->SetTickLabels($legends);
- $graph->xaxis->SetLabelAngle(50);
- $graph->xaxis->SetLabelMargin(4 * $k);
- // X-axis title
- if ($labels[0]) {
- $graph->xaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->xaxis->SetTitleMargin($xaxislblmargin * $k);
- $graph->xaxis->SetTitle($labels[0], 'middle');
- }
-
- // Create the bar plot
- // SPLINES
- if ($splines && $type == 'xy') {
- $spline = new Spline($data[0], $data[1]);
- list($newx, $newy) = $spline->Get(100);
- } else {
- $newx = $data[0];
- $newy = $data[1];
- }
-
- if ($type == 'xy') {
- // LINE PLOT
- $bplot = new LinePlot($newy, $newx);
- // Set color for each line
- $bplot->SetColor($fills[0]);
- $bplot->SetWeight(4 * $k);
- if ($bandw) {
- $bplot->SetShadow("gray5");
- }
- $graph->Add($bplot);
- }
-
- // SCATTER PLOT
- $cplot = new ScatterPlot($data[1], $data[0]);
-
- $cplot->mark->SetType($markers[0]);
- $cplot->mark->SetFillColor($fills[0]);
- $cplot->mark->SetWidth(8 * $k);
- if ($show_values) {
- // mPDF 2.5
- if ($type == 'xy') {
- $cplot->value->Show();
- } // Not if scatter
- $cplot->value->SetMargin(8 * $k);
- $cplot->value->SetColor("darkred");
- $cplot->value->SetFont(FF_USERFONT, FS_NORMAL, 6 * $k);
-
- if ($percent || $show_percent) {
- $cplot->value->SetFormat('%d%%');
- } else {
- $cplot->value->SetFormat("%s");
- }
- }
-
- // Set color for each line
- $cplot->SetColor($fills[0]);
- $cplot->SetWeight(4 * $k);
- if ($bandw) {
- $cplot->SetShadow("gray5");
- }
- $graph->Add($cplot);
- }
- // BAR
- else if ($type == 'bar') {
- // Setup the graph.
- $graph->img->SetMargin($pml * $k, $pmr * $k, $pmt * $k, $pmb * $k); // LRTB
- $graph->SetScale($axes);
- // Setup y-axis
- $graph->yaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- if ($hide_y_axis) {
- $graph->yaxis->Hide();
- }
- if ($hide_grid) {
- $graph->ygrid->Show(false);
- }
- $graph->yaxis->SetLabelMargin(4 * $k);
- if ($ylabel) {
- $graph->yaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->yaxis->SetTitle($ylabel, 'middle');
- $graph->yaxis->SetTitleMargin($yaxislblmargin * $k);
- }
- // Show 0 label on Y-axis (default is not to show)
- $graph->yscale->ticks->SupressZeroLabel(false);
- // Setup X-axis labels
- $graph->xaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->xaxis->SetTickLabels($legends);
- $graph->xaxis->SetLabelAngle($xlangle);
- $graph->xaxis->SetLabelMargin(4 * $k);
- // X-axis title
- if ($xlabel) {
- $graph->xaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->xaxis->SetTitle($xlabel, 'middle');
- $graph->xaxis->SetTitleMargin($xaxislblmargin * $k);
- }
-
- $group = array();
- foreach ($data AS $series => $dat) {
- $rdata = array();
- foreach ($data[$series] AS $row) {
- $rdata[] = $row;
- }
-
- // Create the bar plot
- $bplot = new BarPlot($rdata);
- $bplot->SetWidth(0.6); // for SINGLE??
- // Setup color for gradient fill style
- if ($bandw) {
- $bplot->SetPattern($patterns[$series]);
- } else {
- $bplot->SetFillGradient($fills[$series], "#EEEEEE", GRAD_LEFT_REFLECTION);
- }
-
- // Set color for the frame of each bar
- $bplot->SetColor("darkgray");
- $bplot->SetLegend($labels[$series]);
- if ($bandw) {
- $bplot->SetShadow("gray5");
- }
- if ($show_values) {
- $bplot->value->Show();
- $bplot->value->SetMargin(6 * $k);
- $bplot->value->SetColor("darkred");
- $bplot->value->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- if ($percent || $show_percent) {
- $bplot->value->SetFormat('%d%%');
- } else {
- $bplot->value->SetFormat("%s");
- }
- }
-
- $group[] = $bplot;
- }
- if (count($data) == 1) {
- $graph->Add($group[0]);
- } else {
- // Create the grouped bar plot
- if ($stacked) {
- $gbplot = new AccBarPlot($group);
- } else {
- $gbplot = new GroupBarPlot($group);
- }
- $graph->Add($gbplot);
- }
- } else if ($type == 'horiz_bar') {
- $graph->SetScale($axes);
- $graph->Set90AndMargin($pml * $k, $pmr * $k, $pmt * $k, $pmb * $k); // LRTB
- // Setup y-axis
- $graph->yaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->yaxis->SetLabelMargin(4 * $k);
-
- $graph->yaxis->SetPos('max'); // Intersect at top of x-axis i.e. y axis is at bottom
- // First make the labels look right
- $graph->yaxis->SetLabelAlign('center', 'top');
- if ($percent || $show_percent) {
- $graph->yaxis->SetLabelFormat('%d%%');
- }
- $graph->yaxis->SetLabelSide(SIDE_RIGHT);
- $graph->yaxis->scale->SetGrace(10); // sets 10% headroom
- if ($hide_y_axis) {
- $graph->yaxis->Hide();
- }
- if ($hide_grid) {
- $graph->ygrid->Show(false);
- }
-
- // The fix the tick marks
- $graph->yaxis->SetTickSide(SIDE_LEFT);
- if ($ylabel) {
- $graph->yaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->yaxis->SetTitle($ylabel, 'middle');
- $graph->yaxis->SetTitleMargin($yaxislblmargin * $k);
- // Finally setup the title
- $graph->yaxis->SetTitleSide(SIDE_RIGHT);
- // To align the title to the right use :
- $graph->yaxis->title->Align('right');
- $graph->yaxis->title->SetAngle(0);
- }
-
- // Show 0 label on Y-axis (default is not to show)
- $graph->yscale->ticks->SupressZeroLabel(false);
- // Setup X-axis labels
- $graph->xaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->xaxis->title->SetAngle(90);
- $graph->xaxis->SetTickLabels($legends);
- $graph->xaxis->SetLabelMargin(4 * $k);
- // X-axis title
- if ($xlabel) {
- $graph->xaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- $graph->xaxis->SetTitleMargin($xaxislblmargin * $k);
- $graph->xaxis->SetTitle($xlabel, 'middle');
- }
- $group = array();
- foreach ($data AS $series => $dat) {
- $rdata = array();
- foreach ($data[$series] AS $row) {
- $rdata[] = $row;
- }
- // Create the bar pot
- $bplot = new BarPlot($rdata);
- $bplot->SetWidth(0.6); // for SINGLE??
- // Setup color for gradient fill style
- if ($bandw) {
- $bplot->SetPattern($patterns[$series]);
- } else {
- $bplot->SetFillGradient($fills[$series], "#EEEEEE", GRAD_LEFT_REFLECTION);
- }
-
- // Set color for the frame of each bar
- $bplot->SetColor("darkgray");
- $bplot->SetLegend($labels[$series]);
- if ($bandw) {
- $bplot->SetShadow("gray5");
- }
- if ($show_values) {
- $bplot->value->Show();
- $bplot->value->SetMargin(6 * $k);
- $bplot->value->SetColor("darkred");
- $bplot->value->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
- if ($percent || $show_percent) {
- $bplot->value->SetFormat('%d%%');
- } else {
- $bplot->value->SetFormat("%s");
- }
- }
-
- $group[] = $bplot;
- }
- if (count($data) == 1) {
- $graph->Add($group[0]);
- } else {
- // Create the grouped bar plot
- if ($stacked) {
- $gbplot = new AccBarPlot($group);
- } else {
- $gbplot = new GroupBarPlot($group);
- }
- $graph->Add($gbplot);
- }
- }
- if ($graph) {
- $graph->Stroke(_MPDF_PATH . $figure_file);
- $srcpath = str_replace("\\", "/", dirname(__FILE__)) . "/";
- $srcpath .= $figure_file;
- return array('file' => $srcpath, 'w' => $w, 'h' => $h);
- }
- }
- return false;
-
- }
|