PluginProbe
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin / 1.7
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin v1.7
trunk 1.5 1.6 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 All 71 releases
← All changes | mpdf/graph.php +721 -858 trunk1.7 View file →
@@ -1,858 +1,721 @@
1 -<?php
2 -
3 -// mPDF 4.5.009
4 -define("FF_USERFONT", 15); // See jpgraph_ttf.inc.php for font IDs
5 -global $JpgUseSVGFormat;
6 -$JpgUseSVGFormat = true;
7 -
8 -//======================================================================================================
9 -// DELETE OLD GRAPH FILES FIRST - Housekeeping
10 -// First clear any files in directory that are >1 hrs old
11 -$interval = 3600;
12 -if ($handle = opendir(_MPDF_PATH . 'graph_cache')) {
13 - while (false !== ($file = readdir($handle))) {
14 - if (((filemtime(_MPDF_PATH . 'graph_cache/' . $file) + $interval) < time()) && ($file != "..") && ($file != ".")) {
15 - @unlink(_MPDF_PATH . 'graph_cache/' . $file); // mPDF 4.0
16 - }
17 - }
18 - closedir($handle);
19 -}
20 -//==============================================================================================================
21 -// LOAD GRAPHS
22 -
23 -include_once(_JPGRAPH_PATH . 'jpgraph.php');
24 -include_once(_JPGRAPH_PATH . 'jpgraph_line.php' );
25 -include_once(_JPGRAPH_PATH . 'jpgraph_log.php' );
26 -include_once(_JPGRAPH_PATH . 'jpgraph_scatter.php' );
27 -include_once(_JPGRAPH_PATH . 'jpgraph_regstat.php' );
28 -include_once(_JPGRAPH_PATH . 'jpgraph_pie.php');
29 -include_once(_JPGRAPH_PATH . 'jpgraph_pie3d.php');
30 -include_once(_JPGRAPH_PATH . 'jpgraph_bar.php');
31 -include_once(_JPGRAPH_PATH . 'jpgraph_radar.php');
32 -
33 -require_once __DIR__ . '/MpdfException.php';
34 -
35 -function print_graph($g, $pgwidth)
36 -{
37 - $splines = false;
38 - $bandw = false;
39 - $percent = false;
40 - $show_percent = false;
41 - $stacked = false;
42 - $h = false;
43 - $show_values = false;
44 - $hide_grid = false;
45 - $hide_y_axis = false;
46 -
47 - if (isset($g['attr']['TYPE']) && $g['attr']['TYPE']) {
48 - $type = strtolower($g['attr']['TYPE']);
49 - }
50 - if (!in_array($type, array('bar', 'horiz_bar', 'line', 'radar', 'pie', 'pie3d', 'xy', 'scatter'))) {
51 - $type = 'bar';
52 - } // Default=bar
53 -
54 - if (isset($g['attr']['STACKED']) && $g['attr']['STACKED']) {
55 - $stacked = true;
56 - } // stacked for bar or horiz_bar
57 - if (isset($g['attr']['SPLINES']) && $g['attr']['SPLINES'] && $type == 'xy') {
58 - $splines = true;
59 - } // splines for XY line graphs
60 - if (isset($g['attr']['BANDW']) && $g['attr']['BANDW']) {
61 - $bandw = true;
62 - } // black and white
63 - if (isset($g['attr']['LEGEND-OVERLAP']) && $g['attr']['LEGEND-OVERLAP']) {
64 - $overlap = true;
65 - } // avoid overlap of Legends over graph (line, bar, horiz_bar only)
66 - if (isset($g['attr']['PERCENT']) && $g['attr']['PERCENT'] && $type != 'xy' && $type != 'scatter') {
67 - $percent = true;
68 - } // Show data series as percent of total in series
69 - if (isset($g['attr']['SHOW-VALUES']) && $g['attr']['SHOW-VALUES']) {
70 - $show_values = true;
71 - } // Show the individual data values
72 - if (isset($g['attr']['HIDE-GRID']) && $g['attr']['HIDE-GRID']) {
73 - $hide_grid = true;
74 - } // Hide the y-axis gridlines
75 - if (isset($g['attr']['HIDE-Y-AXIS']) && $g['attr']['HIDE-Y-AXIS']) {
76 - $hide_y_axis = true;
77 - } // Hide the y-axis
78 - // Antialias: If true - better quality curves, but graph line will only be 1px even in PDF 300dpi
79 - // default=true for most except line and radar
80 - if (isset($g['attr']['ANTIALIAS']) && ($g['attr']['ANTIALIAS'] == '' || $g['attr']['ANTIALIAS'] == 0)) {
81 - $antialias = false;
82 - } else if (isset($g['attr']['ANTIALIAS']) && $g['attr']['ANTIALIAS'] > 0) {
83 - $antialias = true;
84 - } else if ($type == 'line' || $type == 'radar') {
85 - $antialias = false;
86 - } else {
87 - $antialias = true;
88 - }
89 -
90 - if ($g['attr']['DPI']) {
91 - $dpi = intval($g['attr']['DPI']);
92 - }
93 - if (!$dpi || $dpi < 50 || $dpi > 2400) {
94 - $dpi = 150;
95 - } // Default dpi 150
96 - $k = (0.2645 / 25.4 * $dpi);
97 -
98 - // mPDF 4.5.009
99 - global $JpgUseSVGFormat;
100 - if (isset($JpgUseSVGFormat) && $JpgUseSVGFormat) {
101 - $img_type = 'svg';
102 - $k = 1; // Overrides as Vector scale does not need DPI
103 - } else {
104 - $img_type = 'png';
105 - }
106 -
107 - if (isset($g['attr']['TITLE']) && $g['attr']['TITLE']) {
108 - $title = $g['attr']['TITLE'];
109 - }
110 -
111 - if (isset($g['attr']['LABEL-X']) && $g['attr']['LABEL-X']) {
112 - $xlabel = $g['attr']['LABEL-X'];
113 - } // NOT IMPLEMENTED??????
114 - if (isset($g['attr']['LABEL-Y']) && $g['attr']['LABEL-Y']) {
115 - $ylabel = $g['attr']['LABEL-Y'];
116 - }
117 -
118 - if (isset($g['attr']['AXIS-X']) && $g['attr']['AXIS-X']) {
119 - $xaxis = strtolower($g['attr']['AXIS-X']);
120 - }
121 - if (!in_array($xaxis, array('text', 'lin', 'linear', 'log'))) {
122 - $xaxis = 'text';
123 - } // Default=text
124 - if ($xaxis == 'linear') {
125 - $xaxis = 'lin';
126 - }
127 -
128 - if (isset($g['attr']['AXIS-Y']) && $g['attr']['AXIS-Y']) {
129 - $yaxis = strtolower($g['attr']['AXIS-Y']);
130 - }
131 - if (!in_array($yaxis, array('lin', 'linear', 'log', 'percent'))) {
132 - $yaxis = 'lin';
133 - } // Default=lin
134 - if ($yaxis == 'percent') {
135 - $show_percent = true;
136 - $yaxis = 'lin';
137 - } // Show percent sign on scales
138 - if ($yaxis == 'linear') {
139 - $yaxis = 'lin';
140 - }
141 -
142 - if ($splines) {
143 - $xaxis = 'lin';
144 - }
145 - $axes = $xaxis . $yaxis; // e.g.textlin, textlog, loglog, loglin, linlog (XY)
146 - // mPDF 4.0
147 - if (isset($g['attr']['cWIDTH']) && $g['attr']['cWIDTH']) {
148 - $w = ($g['attr']['cWIDTH'] / 0.2645);
149 - } // pixels
150 - if (isset($g['attr']['cHEIGHT']) && $g['attr']['cHEIGHT']) {
151 - $h = ($g['attr']['cHEIGHT'] / 0.2645);
152 - }
153 -
154 -
155 - if (isset($g['attr']['SERIES']) && strtolower($g['attr']['SERIES']) == 'rows') {
156 - $dataseries = 'rows';
157 - } else {
158 - $dataseries = 'cols';
159 - }
160 -
161 - // Defaults - define data
162 - $rowbegin = 2;
163 - $colbegin = 2;
164 - if ($type == 'scatter' || $type == 'xy') {
165 - if ($dataseries == 'rows') {
166 - $rowbegin = 1;
167 - } else {
168 - $colbegin = 1;
169 - }
170 - }
171 - $rowend = 0;
172 - $colend = 0;
173 -
174 - if (isset($g['attr']['DATA-ROW-BEGIN']) && ($g['attr']['DATA-ROW-BEGIN'] === '0' || $g['attr']['DATA-ROW-BEGIN'] > 0)) {
175 - $rowbegin = $g['attr']['DATA-ROW-BEGIN'];
176 - }
177 -
178 - if (isset($g['attr']['DATA-COL-BEGIN']) && ($g['attr']['DATA-COL-BEGIN'] === '0' || $g['attr']['DATA-COL-BEGIN'] > 0)) {
179 - $colbegin = $g['attr']['DATA-COL-BEGIN'];
180 - }
181 -
182 - if (isset($g['attr']['DATA-ROW-END']) && ($g['attr']['DATA-ROW-END'] === '0' || $g['attr']['DATA-ROW-END'] <> 0)) {
183 - $rowend = $g['attr']['DATA-ROW-END'];
184 - }
185 - if (isset($g['attr']['DATA-COL-END']) && ($g['attr']['DATA-COL-END'] === '0' || $g['attr']['DATA-COL-END'] <> 0)) {
186 - $colend = $g['attr']['DATA-COL-END'];
187 - }
188 -
189 - $nr = count($g['data']);
190 - $nc = 0;
191 - foreach ($g['data'] AS $r) {
192 - $cc = 0;
193 - foreach ($r AS $c) {
194 - $cc++;
195 - }
196 - $nc = max($nc, $cc);
197 - }
198 - if ($colend == 0) {
199 - $colend = $nc;
200 - } else if ($colend < 0) {
201 - $colend = $nc + $colend;
202 - }
203 -
204 - if ($rowend == 0) {
205 - $rowend = $nr;
206 - } else if ($rowend < 0) {
207 - $rowend = $nr + $rowend;
208 - }
209 -
210 - if ($colend < $colbegin) {
211 - $colend = $colbegin;
212 - }
213 - if ($rowend < $rowbegin) {
214 - $rowend = $rowbegin;
215 - }
216 -
217 -// if ($type == 'xy' || $type=='scatter') { $colstart=0; }
218 - // Get Data + Totals
219 - $data = array();
220 - $totals = array();
221 - for ($r = ($rowbegin - 1); $r < $rowend; $r++) {
222 - for ($c = ($colbegin - 1); $c < $colend; $c++) {
223 - if (isset($g['data'][$r][$c])) {
224 - $g['data'][$r][$c] = floatval($g['data'][$r][$c]);
225 - } else {
226 - $g['data'][$r][$c] = 0;
227 - }
228 - if ($dataseries == 'rows') {
229 - $data[($r + 1 - $rowbegin)][($c + 1 - $colbegin)] = $g['data'][$r][$c];
230 - $totals[($r + 1 - $rowbegin)] += $g['data'][$r][$c];
231 - } else {
232 - $data[($c + 1 - $colbegin)][($r + 1 - $rowbegin)] = $g['data'][$r][$c];
233 - if (isset($totals[($c + 1 - $colbegin)])) {
234 - $totals[($c + 1 - $colbegin)] += $g['data'][$r][$c];
235 - } else {
236 - $totals[($c + 1 - $colbegin)] = $g['data'][$r][$c];
237 - }
238 - }
239 - }
240 - }
241 - // PERCENT
242 - if ($percent && $type != 'pie' && $type != 'pie3d') {
243 - for ($r = 0; $r < count($data); $r++) {
244 - for ($c = 0; $c < count($data[$r]); $c++) {
245 - $data[$r][$c] = $data[$r][$c] / $totals[$r] * 100;
246 - }
247 - }
248 - }
249 - // Get Legends and labels
250 - $legends = array();
251 - $labels = array();
252 - $longestlegend = 0;
253 - $longestlabel = 0;
254 - if ($dataseries == 'cols') {
255 - if ($colbegin > 1) {
256 - for ($r = ($rowbegin - 1); $r < $rowend; $r++) {
257 - $legends[($r + 1 - $rowbegin)] = $g['data'][$r][0];
258 - $longestlegend = max($longestlegend, strlen($g['data'][$r][0]));
259 - }
260 - }
261 - if ($rowbegin > 1) {
262 - for ($c = ($colbegin - 1); $c < $colend; $c++) {
263 - $labels[($c + 1 - $colbegin)] = $g['data'][0][$c];
264 - $longestlabel = max($longestlabel, strlen($g['data'][0][$c]));
265 - }
266 - }
267 - } else if ($dataseries == 'rows') {
268 - if ($colbegin > 1) {
269 - for ($r = ($rowbegin - 1); $r < $rowend; $r++) {
270 - $labels[($r + 1 - $rowbegin)] = $g['data'][$r][0];
271 - $longestlabel = max($longestlabel, strlen($g['data'][$r][0]));
272 - }
273 - }
274 - if ($rowbegin > 1) {
275 - for ($c = ($colbegin - 1); $c < $colend; $c++) {
276 - $legends[($c + 1 - $colbegin)] = $g['data'][0][$c];
277 - $longestlegend = max($longestlegend, strlen($g['data'][0][$c]));
278 - }
279 - }
280 - }
281 - // Default sizes
282 - $defsize = array();
283 - $defsize['pie'] = array('w' => 600, 'h' => 300);
284 - $defsize['pie3d'] = array('w' => 600, 'h' => 300);
285 - $defsize['radar'] = array('w' => 600, 'h' => 300);
286 - $defsize['line'] = array('w' => 600, 'h' => 400);
287 - $defsize['xy'] = array('w' => 600, 'h' => 400);
288 - $defsize['scatter'] = array('w' => 600, 'h' => 400);
289 - $defsize['bar'] = array('w' => 600, 'h' => 400);
290 - $defsize['horiz_bar'] = array('w' => 600, 'h' => 500);
291 -
292 -
293 - // Use default ratios
294 - if ($w && !$h) {
295 - $h = $w * $defsize[$type]['h'] / $defsize[$type]['w'];
296 - }
297 - if ($h && !$w) {
298 - $w = $h * $defsize[$type]['w'] / $defsize[$type]['h'];
299 - }
300 - if (!$h && !$w) {
301 - $w = $defsize[$type]['w'];
302 - $h = $defsize[$type]['h'];
303 - }
304 -
305 -
306 - if (count($data) > 0 && $type) {
307 - $figure_file = "graph_cache/" . rand(11111, 999999999) . "." . $img_type;
308 - if ($bandw) {
309 - $colours = array('snow1', 'black', 'snow4', 'snow3', 'snow2', 'cadetblue4', 'cadetblue3', 'cadetblue1', 'bisque4', 'bisque2', 'beige');
310 - } else {
311 - $colours = array('cyan', 'darkorchid4', 'cadetblue3', 'khaki1', 'darkolivegreen2', 'cadetblue4', 'coral', 'cyan4', 'rosybrown3', 'wheat1');
312 - }
313 - $fills = array('navy', 'orange', 'red', 'yellow', 'purple', 'navy', 'orange', 'red', 'yellow', 'purple');
314 - $patterns = array(PATTERN_DIAG1, PATTERN_CROSS1, PATTERN_STRIPE1, PATTERN_DIAG3, PATTERN_CROSS2, PATTERN_DIAG2, PATTERN_DIAG4, PATTERN_CROSS3, PATTERN_CROSS4, PATTERN_STRIPE1);
315 - $markers = array(MARK_DIAMOND, MARK_SQUARE, MARK_CIRCLE, MARK_UTRIANGLE, MARK_DTRIANGLE, MARK_FILLEDCIRCLE, MARK_CROSS, MARK_STAR, MARK_X);
316 -
317 - // LEGENDS
318 - if ($type == 'pie' || $type == 'pie3d') {
319 - $graph = new PieGraph(($w * $k), ($h * $k));
320 - } else if ($type == 'radar') {
321 - $graph = new RadarGraph(($w * $k), ($h * $k));
322 - } else {
323 - $graph = new Graph(($w * $k), ($h * $k));
324 - }
325 -
326 - // mPDF 4.5.009
327 - // $graph->img->SetImgFormat($img_type) ;
328 - // if (strtoupper($img_type)=='JPEG') { $graph->img->SetQuality(90); }
329 - if ($antialias) {
330 - $graph->img->SetAntiAliasing();
331 - }
332 - $graph->SetShadow(true, 2 * $k);
333 - $graph->SetMarginColor("white");
334 - // TITLE
335 - $graph->title->Set($title);
336 - $graph->title->SetMargin(10 * $k);
337 - $graph->title->SetFont(FF_USERFONT, FS_BOLD, 11 * $k);
338 - $graph->title->SetColor("black");
339 - $graph->legend->SetLineSpacing(3 * $k);
340 - $graph->legend->SetMarkAbsSize(6 * $k);
341 - $graph->legend->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
342 -
343 - // Set GRAPH IMAGE MARGINS
344 - if ($type == 'pie' || $type == 'pie3d') {
345 - $psize = 0.3;
346 - $pposxabs = ($w / 2);
347 - $pposy = 0.55;
348 - if ($longestlegend) { // if legend showing
349 - $pposxabs -= ((($longestlegend * 5) + 20) / 2);
350 - }
351 - $pposx = ($pposxabs / $w);
352 - $graph->legend->Pos(0.02, 0.5, 'right', 'center');
353 - } else if ($type == 'radar') {
354 - $psize = 0.5;
355 - $pposxabs = ($w / 2);
356 - $pposy = 0.55;
357 - if ($longestlabel) { // if legend showing
358 - $pposxabs -= ((($longestlabel * 5) + 20) / 2);
359 - }
360 - $pposx = ($pposxabs / $w);
361 - $graph->legend->Pos(0.02, 0.5, 'right', 'center');
362 - } else if ($type == 'xy' || $type == 'scatter') {
363 - $pml = 50;
364 - $pmr = 20;
365 - $pmt = 60;
366 - $pmb = 50;
367 - $xaxislblmargin = $pmb - 30;
368 - $yaxislblmargin = $pml - 15;
369 - $graph->legend->Pos(0.02, 0.1, 'right', 'top');
370 - } else if ($type == 'line' || $type == 'bar') {
371 - $pml = 50;
372 - $pmr = 20;
373 - $pmt = 60;
374 - $pmb = 50;
375 - $xlangle = 0;
376 - $ll = ($longestlegend * 5); // 45 degrees 8pt fontsize
377 - if ($ll > 5 || ($ll > 3 && count($data) > 10)) {
378 - $pmb = max($pmb, $ll + 30);
379 - $xlangle = 50;
380 - }
381 - $xaxislblmargin = $pmb - 30;
382 - $yaxislblmargin = $pml - 15;
383 - if ($longestlabel && !$overlap) { // if legend showing
384 - $pmr = ((($longestlabel * 5) + 40));
385 - }
386 - $graph->legend->Pos(0.02, 0.1, 'right', 'top');
387 - } else if ($type == 'horiz_bar') {
388 - $pml = 50;
389 - $pmr = 20;
390 - $pmt = 50;
391 - $pmb = 45;
392 - $ll = ($longestlegend * 6.5); // 8pt fontsize
393 - $pml = max($pml, $ll + 20);
394 - $xaxislblmargin = $pml - 20;
395 - $yaxislblmargin = $pmb - 15;
396 - if ($longestlabel && !$overlap) { // if legend showing
397 - $pmr = ((($longestlabel * 5) + 40));
398 - }
399 - $graph->legend->Pos(0.02, 0.1, 'right', 'top');
400 - }
401 -
402 -
403 - // DRAW THE GRAPHS
404 - if ($type == 'pie') {
405 - $p1 = new PiePlot($data[0]);
406 - $p1->SetSliceColors($colours);
407 -
408 - if ($show_values) {
409 - $p1->value->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
410 - if ($percent) {
411 - $p1->SetLabelType(PIE_VALUE_PERADJ);
412 - } //PIE_VAL_PER = default
413 - else {
414 - $p1->SetLabelType(PIE_VALUE_ABS);
415 - }
416 - if ($percent || $show_percent) {
417 - $p1->value->SetFormat("%d%%");
418 - } else {
419 - $p1->value->SetFormat("%s");
420 - }
421 - // Enable and set policy for guide-lines. Make labels line up vertically
422 - $p1->SetGuideLines(true);
423 - $p1->SetGuideLinesAdjust(1.5);
424 - } else {
425 - $p1->value->Show(false);
426 - }
427 - $p1->SetLegends($legends);
428 - $p1->SetSize($psize);
429 - $p1->SetCenter($pposx, $pposy);
430 - if ($labels[0]) {
431 - $graph->subtitle->Set($labels[0]);
432 - $graph->subtitle->SetMargin(10 * $k);
433 - $graph->subtitle->SetFont(FF_USERFONT, FS_BOLD, 11 * $k);
434 - $graph->subtitle->SetColor("black");
435 - }
436 - $graph->Add($p1);
437 - } else if ($type == 'pie3d') {
438 - $p1 = new PiePlot3d($data[0]);
439 - $p1->SetSliceColors($colours);
440 - if ($show_values) {
441 - $p1->value->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
442 - if ($percent) {
443 - $p1->SetLabelType(PIE_VALUE_PERADJ);
444 - } //PIE_VAL_PER = default
445 - else {
446 - $p1->SetLabelType(PIE_VALUE_ABS);
447 - }
448 - if ($percent || $show_percent) {
449 - $p1->value->SetFormat("%d%%");
450 - } else {
451 - $p1->value->SetFormat("%s");
452 - }
453 - } else {
454 - $p1->value->Show(false);
455 - }
456 - $p1->SetLegends($legends);
457 - $p1->SetEdge();
458 - $p1->SetSize($psize);
459 - $p1->SetCenter($pposx, $pposy);
460 -
461 - if ($labels[0]) {
462 - $graph->subtitle->Set($labels[0]);
463 - $graph->subtitle->SetMargin(10 * $k);
464 - $graph->subtitle->SetFont(FF_USERFONT, FS_BOLD, 11 * $k);
465 - $graph->subtitle->SetColor("black");
466 - }
467 -
468 - $graph->Add($p1);
469 - }
470 - // RADAR
471 - else if ($type == 'radar') {
472 - $graph->SetSize($psize);
473 - $graph->SetPos($pposx, $pposy);
474 -
475 - $graph->SetTitles($legends); // labels each axis
476 -
477 - $graph->axis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
478 - $graph->axis->title->SetMargin(5 * $k);
479 - $graph->axis->SetWeight(1 * $k);
480 - $graph->axis->HideLabels();
481 - $graph->axis->SetFont(FF_USERFONT, FS_NORMAL, 6 * $k);
482 - $graph->HideTickMarks();
483 -
484 - $group = array();
485 - foreach ($data AS $series => $dat) {
486 - $rdata = array();
487 - foreach ($data[$series] AS $row) {
488 - $rdata[] = $row;
489 - }
490 - if (count($rdata) < 3) {
491 - throw new MpdfException("ERROR::Graph::Cannot create a Radar Plot with less than 3 data points.");
492 - }
493 - // Create the radar plot
494 - $bplot = new RadarPlot($rdata);
495 - $bplot->mark->SetType($markers[$series]);
496 - $bplot->mark->SetFillColor($colours[$series]);
497 - $bplot->mark->SetWidth(3 * $k);
498 - $bplot->SetColor($colours[$series]);
499 - if ($series == 0) {
500 - $bplot->SetFillColor('lightred');
501 - } else {
502 - $bplot->SetFill(false);
503 - }
504 - $bplot->SetLineWeight(1 * $k);
505 - $bplot->SetLegend($labels[$series]);
506 - if ($bandw) {
507 - $bplot->SetShadow("gray5");
508 - }
509 - $graph->Add($bplot);
510 - }
511 - }
512 - // LINE
513 - else if ($type == 'line') {
514 - // Setup the graph.
515 - $graph->img->SetMargin($pml * $k, $pmr * $k, $pmt * $k, $pmb * $k); // LRTB
516 - $graph->SetScale($axes);
517 - $graph->yaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
518 -
519 - if ($ylabel) {
520 - $graph->yaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
521 - $graph->yaxis->SetTitle($ylabel, 'middle');
522 - $graph->yaxis->SetTitleMargin($yaxislblmargin * $k);
523 - }
524 -
525 - $graph->yaxis->SetLabelMargin(4 * $k);
526 - if ($percent || $show_percent) {
527 - $graph->yaxis->SetLabelFormat('%d%%');
528 - } // Percent
529 - // Show 0 label on Y-axis (default is not to show)
530 - $graph->yscale->ticks->SupressZeroLabel(true);
531 - if ($hide_y_axis) {
532 - $graph->yaxis->Hide();
533 - }
534 - if ($hide_grid) {
535 - $graph->ygrid->Show(false);
536 - }
537 -
538 - // Setup X-axis labels
539 - $graph->xaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
540 - $graph->xaxis->SetTickLabels($legends);
541 - $graph->xaxis->SetLabelAngle($xlangle);
542 - $graph->xaxis->SetLabelMargin(4 * $k);
543 - // X-axis title
544 - if ($xlabel) {
545 - $graph->xaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
546 - $graph->xaxis->SetTitle($xlabel, 'middle');
547 - $graph->xaxis->SetTitleMargin($xaxislblmargin * $k);
548 - }
549 - foreach ($data AS $series => $rdata) {
550 - $bplot = new LinePlot($rdata);
551 - $bplot->mark->SetType($markers[$series]);
552 - $bplot->mark->SetFillColor($colours[$series]);
553 - $bplot->mark->SetWidth(4 * $k);
554 - if ($show_values) {
555 - $bplot->value->Show(); // Not if scatter
556 - $bplot->value->SetMargin(6 * $k);
557 - $bplot->value->SetColor("darkred");
558 - $bplot->value->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
559 - if ($percent || $show_percent) {
560 - $bplot->value->SetFormat('%d%%');
561 - } else {
562 - $bplot->value->SetFormat("%s");
563 - }
564 - }
565 - // Set color for each line
566 - $bplot->SetColor($colours[$series]);
567 - $bplot->SetWeight(2 * $k);
568 - $bplot->SetLegend($labels[$series]);
569 - if ($bandw) {
570 - $bplot->SetShadow("gray5");
571 - }
572 - // Indent the X-scale so the first and last point doesn't fall on the edges
573 - $bplot->SetCenter();
574 - $graph->Add($bplot);
575 - }
576 - }
577 - // XY or SCATTER
578 - else if ($type == 'xy' || $type == 'scatter') {
579 - // Setup the graph.
580 - $graph->img->SetMargin($pml * $k, $pmr * $k, $pmt * $k, $pmb * $k); // LRTB
581 - $graph->SetScale($axes);
582 - // Setup font for axis
583 - $graph->yaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
584 - // Y-axis title
585 - if ($labels[1]) {
586 - $graph->yaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
587 - $graph->yaxis->SetTitleMargin($yaxislblmargin * $k);
588 - $graph->yaxis->SetTitle($labels[1], 'middle');
589 - }
590 -
591 -
592 - $graph->yaxis->SetLabelMargin(4 * $k);
593 - if ($percent || $show_percent) {
594 - $graph->yaxis->SetLabelFormat('%d%%');
595 - } // Percent
596 - // Show 0 label on Y-axis (default is not to show)
597 - $graph->yscale->ticks->SupressZeroLabel(true);
598 - // Just let the maximum be autoscaled
599 - $graph->yaxis->scale->SetAutoMin(0);
600 - if ($hide_y_axis) {
601 - $graph->yaxis->Hide();
602 - }
603 - if ($hide_grid) {
604 - $graph->ygrid->Show(false);
605 - }
606 -
607 - // Setup X-axis labels
608 - $graph->xaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
609 - // mPDF 2.5 Corrects labelling of x-axis
610 - // $graph->xaxis->SetTickLabels($legends);
611 - $graph->xaxis->SetLabelAngle(50);
612 - $graph->xaxis->SetLabelMargin(4 * $k);
613 - // X-axis title
614 - if ($labels[0]) {
615 - $graph->xaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
616 - $graph->xaxis->SetTitleMargin($xaxislblmargin * $k);
617 - $graph->xaxis->SetTitle($labels[0], 'middle');
618 - }
619 -
620 - // Create the bar plot
621 - // SPLINES
622 - if ($splines && $type == 'xy') {
623 - $spline = new Spline($data[0], $data[1]);
624 - list($newx, $newy) = $spline->Get(100);
625 - } else {
626 - $newx = $data[0];
627 - $newy = $data[1];
628 - }
629 -
630 - if ($type == 'xy') {
631 - // LINE PLOT
632 - $bplot = new LinePlot($newy, $newx);
633 - // Set color for each line
634 - $bplot->SetColor($fills[0]);
635 - $bplot->SetWeight(4 * $k);
636 - if ($bandw) {
637 - $bplot->SetShadow("gray5");
638 - }
639 - $graph->Add($bplot);
640 - }
641 -
642 - // SCATTER PLOT
643 - $cplot = new ScatterPlot($data[1], $data[0]);
644 -
645 - $cplot->mark->SetType($markers[0]);
646 - $cplot->mark->SetFillColor($fills[0]);
647 - $cplot->mark->SetWidth(8 * $k);
648 - if ($show_values) {
649 - // mPDF 2.5
650 - if ($type == 'xy') {
651 - $cplot->value->Show();
652 - } // Not if scatter
653 - $cplot->value->SetMargin(8 * $k);
654 - $cplot->value->SetColor("darkred");
655 - $cplot->value->SetFont(FF_USERFONT, FS_NORMAL, 6 * $k);
656 -
657 - if ($percent || $show_percent) {
658 - $cplot->value->SetFormat('%d%%');
659 - } else {
660 - $cplot->value->SetFormat("%s");
661 - }
662 - }
663 -
664 - // Set color for each line
665 - $cplot->SetColor($fills[0]);
666 - $cplot->SetWeight(4 * $k);
667 - if ($bandw) {
668 - $cplot->SetShadow("gray5");
669 - }
670 - $graph->Add($cplot);
671 - }
672 - // BAR
673 - else if ($type == 'bar') {
674 - // Setup the graph.
675 - $graph->img->SetMargin($pml * $k, $pmr * $k, $pmt * $k, $pmb * $k); // LRTB
676 - $graph->SetScale($axes);
677 - // Setup y-axis
678 - $graph->yaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
679 - if ($hide_y_axis) {
680 - $graph->yaxis->Hide();
681 - }
682 - if ($hide_grid) {
683 - $graph->ygrid->Show(false);
684 - }
685 - $graph->yaxis->SetLabelMargin(4 * $k);
686 - if ($ylabel) {
687 - $graph->yaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
688 - $graph->yaxis->SetTitle($ylabel, 'middle');
689 - $graph->yaxis->SetTitleMargin($yaxislblmargin * $k);
690 - }
691 - // Show 0 label on Y-axis (default is not to show)
692 - $graph->yscale->ticks->SupressZeroLabel(false);
693 - // Setup X-axis labels
694 - $graph->xaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
695 - $graph->xaxis->SetTickLabels($legends);
696 - $graph->xaxis->SetLabelAngle($xlangle);
697 - $graph->xaxis->SetLabelMargin(4 * $k);
698 - // X-axis title
699 - if ($xlabel) {
700 - $graph->xaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
701 - $graph->xaxis->SetTitle($xlabel, 'middle');
702 - $graph->xaxis->SetTitleMargin($xaxislblmargin * $k);
703 - }
704 -
705 - $group = array();
706 - foreach ($data AS $series => $dat) {
707 - $rdata = array();
708 - foreach ($data[$series] AS $row) {
709 - $rdata[] = $row;
710 - }
711 -
712 - // Create the bar plot
713 - $bplot = new BarPlot($rdata);
714 - $bplot->SetWidth(0.6); // for SINGLE??
715 - // Setup color for gradient fill style
716 - if ($bandw) {
717 - $bplot->SetPattern($patterns[$series]);
718 - } else {
719 - $bplot->SetFillGradient($fills[$series], "#EEEEEE", GRAD_LEFT_REFLECTION);
720 - }
721 -
722 - // Set color for the frame of each bar
723 - $bplot->SetColor("darkgray");
724 - $bplot->SetLegend($labels[$series]);
725 - if ($bandw) {
726 - $bplot->SetShadow("gray5");
727 - }
728 - if ($show_values) {
729 - $bplot->value->Show();
730 - $bplot->value->SetMargin(6 * $k);
731 - $bplot->value->SetColor("darkred");
732 - $bplot->value->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
733 - if ($percent || $show_percent) {
734 - $bplot->value->SetFormat('%d%%');
735 - } else {
736 - $bplot->value->SetFormat("%s");
737 - }
738 - }
739 -
740 - $group[] = $bplot;
741 - }
742 - if (count($data) == 1) {
743 - $graph->Add($group[0]);
744 - } else {
745 - // Create the grouped bar plot
746 - if ($stacked) {
747 - $gbplot = new AccBarPlot($group);
748 - } else {
749 - $gbplot = new GroupBarPlot($group);
750 - }
751 - $graph->Add($gbplot);
752 - }
753 - } else if ($type == 'horiz_bar') {
754 - $graph->SetScale($axes);
755 - $graph->Set90AndMargin($pml * $k, $pmr * $k, $pmt * $k, $pmb * $k); // LRTB
756 - // Setup y-axis
757 - $graph->yaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
758 - $graph->yaxis->SetLabelMargin(4 * $k);
759 -
760 - $graph->yaxis->SetPos('max'); // Intersect at top of x-axis i.e. y axis is at bottom
761 - // First make the labels look right
762 - $graph->yaxis->SetLabelAlign('center', 'top');
763 - if ($percent || $show_percent) {
764 - $graph->yaxis->SetLabelFormat('%d%%');
765 - }
766 - $graph->yaxis->SetLabelSide(SIDE_RIGHT);
767 - $graph->yaxis->scale->SetGrace(10); // sets 10% headroom
768 - if ($hide_y_axis) {
769 - $graph->yaxis->Hide();
770 - }
771 - if ($hide_grid) {
772 - $graph->ygrid->Show(false);
773 - }
774 -
775 - // The fix the tick marks
776 - $graph->yaxis->SetTickSide(SIDE_LEFT);
777 - if ($ylabel) {
778 - $graph->yaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
779 - $graph->yaxis->SetTitle($ylabel, 'middle');
780 - $graph->yaxis->SetTitleMargin($yaxislblmargin * $k);
781 - // Finally setup the title
782 - $graph->yaxis->SetTitleSide(SIDE_RIGHT);
783 - // To align the title to the right use :
784 - $graph->yaxis->title->Align('right');
785 - $graph->yaxis->title->SetAngle(0);
786 - }
787 -
788 - // Show 0 label on Y-axis (default is not to show)
789 - $graph->yscale->ticks->SupressZeroLabel(false);
790 - // Setup X-axis labels
791 - $graph->xaxis->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
792 - $graph->xaxis->title->SetAngle(90);
793 - $graph->xaxis->SetTickLabels($legends);
794 - $graph->xaxis->SetLabelMargin(4 * $k);
795 - // X-axis title
796 - if ($xlabel) {
797 - $graph->xaxis->title->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
798 - $graph->xaxis->SetTitleMargin($xaxislblmargin * $k);
799 - $graph->xaxis->SetTitle($xlabel, 'middle');
800 - }
801 - $group = array();
802 - foreach ($data AS $series => $dat) {
803 - $rdata = array();
804 - foreach ($data[$series] AS $row) {
805 - $rdata[] = $row;
806 - }
807 - // Create the bar pot
808 - $bplot = new BarPlot($rdata);
809 - $bplot->SetWidth(0.6); // for SINGLE??
810 - // Setup color for gradient fill style
811 - if ($bandw) {
812 - $bplot->SetPattern($patterns[$series]);
813 - } else {
814 - $bplot->SetFillGradient($fills[$series], "#EEEEEE", GRAD_LEFT_REFLECTION);
815 - }
816 -
817 - // Set color for the frame of each bar
818 - $bplot->SetColor("darkgray");
819 - $bplot->SetLegend($labels[$series]);
820 - if ($bandw) {
821 - $bplot->SetShadow("gray5");
822 - }
823 - if ($show_values) {
824 - $bplot->value->Show();
825 - $bplot->value->SetMargin(6 * $k);
826 - $bplot->value->SetColor("darkred");
827 - $bplot->value->SetFont(FF_USERFONT, FS_NORMAL, 8 * $k);
828 - if ($percent || $show_percent) {
829 - $bplot->value->SetFormat('%d%%');
830 - } else {
831 - $bplot->value->SetFormat("%s");
832 - }
833 - }
834 -
835 - $group[] = $bplot;
836 - }
837 - if (count($data) == 1) {
838 - $graph->Add($group[0]);
839 - } else {
840 - // Create the grouped bar plot
841 - if ($stacked) {
842 - $gbplot = new AccBarPlot($group);
843 - } else {
844 - $gbplot = new GroupBarPlot($group);
845 - }
846 - $graph->Add($gbplot);
847 - }
848 - }
849 - if ($graph) {
850 - $graph->Stroke(_MPDF_PATH . $figure_file);
851 - $srcpath = str_replace("\\", "/", dirname(__FILE__)) . "/";
852 - $srcpath .= $figure_file;
853 - return array('file' => $srcpath, 'w' => $w, 'h' => $h);
854 - }
855 - }
856 - return false;
857 -
858 -}
1 +<?php
2 +
3 +
4 +// mPDF 4.5.009
5 +define("FF_USERFONT", 15); // See jpgraph_ttf.inc.php for font IDs
6 +global $JpgUseSVGFormat;
7 +$JpgUseSVGFormat = true;
8 +
9 +//======================================================================================================
10 +// DELETE OLD GRAPH FILES FIRST - Housekeeping
11 +// First clear any files in directory that are >1 hrs old
12 + $interval = 3600;
13 + if ($handle = opendir(_MPDF_PATH.'graph_cache')) {
14 + while (false !== ($file = readdir($handle))) {
15 + if (((filemtime(_MPDF_PATH.'graph_cache/'.$file)+$interval) < time()) && ($file != "..") && ($file != ".")) {
16 + @unlink(_MPDF_PATH.'graph_cache/'.$file); // mPDF 4.0
17 + }
18 + }
19 + closedir($handle);
20 + }
21 +//==============================================================================================================
22 +// LOAD GRAPHS
23 +
24 + include_once(_JPGRAPH_PATH.'jpgraph.php');
25 + include_once(_JPGRAPH_PATH.'jpgraph_line.php' );
26 + include_once(_JPGRAPH_PATH.'jpgraph_log.php' );
27 + include_once(_JPGRAPH_PATH.'jpgraph_scatter.php' );
28 + include_once(_JPGRAPH_PATH.'jpgraph_regstat.php' );
29 + include_once(_JPGRAPH_PATH.'jpgraph_pie.php');
30 + include_once(_JPGRAPH_PATH.'jpgraph_pie3d.php');
31 + include_once(_JPGRAPH_PATH.'jpgraph_bar.php');
32 + include_once(_JPGRAPH_PATH.'jpgraph_radar.php');
33 +
34 +
35 +//======================================================================================================
36 +//*****************************************************************************************************
37 +//*****************************************************************************************************
38 +//*****************************************************************************************************
39 +//*****************************************************************************************************
40 +//*****************************************************************************************************
41 +//*****************************************************************************************************
42 +//======================================================================================================
43 +//======================================================================================================
44 +
45 +//======================================================================================================
46 +//======================================================================================================
47 +
48 +//======================================================================================================
49 +function print_graph($g,$pgwidth) {
50 + $splines = false;
51 + $bandw = false;
52 + $percent = false;
53 + $show_percent = false;
54 + $stacked = false;
55 + $h = false;
56 + $show_values = false;
57 + $hide_grid = false;
58 + $hide_y_axis = false;
59 +
60 + if (isset($g['attr']['TYPE']) && $g['attr']['TYPE']) { $type = strtolower($g['attr']['TYPE']); }
61 + if (!in_array($type,array('bar','horiz_bar','line','radar','pie','pie3d','xy','scatter'))) { $type = 'bar'; } // Default=bar
62 +
63 + if (isset($g['attr']['STACKED']) && $g['attr']['STACKED']) { $stacked = true; } // stacked for bar or horiz_bar
64 + if (isset($g['attr']['SPLINES']) && $g['attr']['SPLINES'] && $type=='xy') { $splines = true; } // splines for XY line graphs
65 + if (isset($g['attr']['BANDW']) && $g['attr']['BANDW']) { $bandw = true; } // black and white
66 + if (isset($g['attr']['LEGEND-OVERLAP']) && $g['attr']['LEGEND-OVERLAP']) { $overlap = true; } // avoid overlap of Legends over graph (line, bar, horiz_bar only)
67 + if (isset($g['attr']['PERCENT']) && $g['attr']['PERCENT'] && $type != 'xy' && $type != 'scatter') { $percent = true; } // Show data series as percent of total in series
68 + if (isset($g['attr']['SHOW-VALUES']) && $g['attr']['SHOW-VALUES']) { $show_values = true; } // Show the individual data values
69 + if (isset($g['attr']['HIDE-GRID']) && $g['attr']['HIDE-GRID']) { $hide_grid = true; } // Hide the y-axis gridlines
70 + if (isset($g['attr']['HIDE-Y-AXIS']) && $g['attr']['HIDE-Y-AXIS']) { $hide_y_axis = true; } // Hide the y-axis
71 +
72 +
73 + // Antialias: If true - better quality curves, but graph line will only be 1px even in PDF 300dpi
74 + // default=true for most except line and radar
75 + if (isset($g['attr']['ANTIALIAS']) && ($g['attr']['ANTIALIAS']=='' || $g['attr']['ANTIALIAS']==0)) { $antialias = false; }
76 + else if (isset($g['attr']['ANTIALIAS']) && $g['attr']['ANTIALIAS'] > 0) { $antialias = true; }
77 + else if ($type=='line' || $type=='radar') { $antialias = false; }
78 + else { $antialias = true; }
79 +
80 + if ($g['attr']['DPI']) { $dpi = intval($g['attr']['DPI']); }
81 + if (!$dpi || $dpi < 50 || $dpi > 2400) { $dpi = 150; } // Default dpi 150
82 + $k = (0.2645/25.4 * $dpi);
83 +
84 + // mPDF 4.5.009
85 + global $JpgUseSVGFormat;
86 + if (isset($JpgUseSVGFormat) && $JpgUseSVGFormat) {
87 + $img_type = 'svg';
88 + $k = 1; // Overrides as Vector scale does not need DPI
89 + }
90 + else {
91 + $img_type = 'png';
92 + }
93 +
94 + if (isset($g['attr']['TITLE']) && $g['attr']['TITLE']) { $title = $g['attr']['TITLE']; }
95 +
96 + if (isset($g['attr']['LABEL-X']) && $g['attr']['LABEL-X']) { $xlabel = $g['attr']['LABEL-X']; } // NOT IMPLEMENTED??????
97 + if (isset($g['attr']['LABEL-Y']) && $g['attr']['LABEL-Y']) { $ylabel = $g['attr']['LABEL-Y']; }
98 +
99 + if (isset($g['attr']['AXIS-X']) && $g['attr']['AXIS-X']) { $xaxis = strtolower($g['attr']['AXIS-X']); }
100 + if (!in_array($xaxis,array('text','lin','linear','log'))) { $xaxis = 'text'; } // Default=text
101 + if ($xaxis == 'linear') { $xaxis = 'lin'; }
102 +
103 + if (isset($g['attr']['AXIS-Y']) && $g['attr']['AXIS-Y']) { $yaxis = strtolower($g['attr']['AXIS-Y']); }
104 + if (!in_array($yaxis,array('lin','linear','log','percent'))) { $yaxis = 'lin'; } // Default=lin
105 + if ($yaxis == 'percent') { $show_percent = true; $yaxis = 'lin'; } // Show percent sign on scales
106 + if ($yaxis == 'linear') { $yaxis = 'lin'; }
107 +
108 + if ($splines) { $xaxis = 'lin'; }
109 + $axes = $xaxis.$yaxis; // e.g.textlin, textlog, loglog, loglin, linlog (XY)
110 +
111 + // mPDF 4.0
112 + if (isset($g['attr']['cWIDTH']) && $g['attr']['cWIDTH']) { $w=($g['attr']['cWIDTH'] / 0.2645); } // pixels
113 + if (isset($g['attr']['cHEIGHT']) && $g['attr']['cHEIGHT']) { $h=($g['attr']['cHEIGHT'] / 0.2645); }
114 +
115 +
116 + if (isset($g['attr']['SERIES']) && strtolower($g['attr']['SERIES']) == 'rows') { $dataseries = 'rows'; }
117 + else { $dataseries = 'cols'; }
118 +
119 + // Defaults - define data
120 + $rowbegin = 2;
121 + $colbegin = 2;
122 + if($type=='scatter' || $type=='xy') {
123 + if ($dataseries == 'rows') { $rowbegin = 1; }
124 + else { $colbegin = 1; }
125 + }
126 + $rowend = 0;
127 + $colend = 0;
128 +
129 + 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']; }
130 +
131 + 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']; }
132 +
133 + 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']; }
134 + 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']; }
135 +
136 + $nr = count($g['data']);
137 + $nc = 0;
138 + foreach($g['data'] AS $r) {
139 + $cc=0;
140 + foreach($r AS $c) { $cc++; }
141 + $nc = max($nc,$cc);
142 + }
143 + if ($colend == 0) { $colend = $nc; }
144 + else if ($colend < 0) { $colend = $nc+$colend; }
145 +
146 + if ($rowend == 0) { $rowend = $nr; }
147 + else if ($rowend < 0) { $rowend = $nr+$rowend; }
148 +
149 + if ($colend < $colbegin) { $colend = $colbegin; }
150 + if ($rowend < $rowbegin) { $rowend = $rowbegin; }
151 +
152 +// if ($type == 'xy' || $type=='scatter') { $colstart=0; }
153 +
154 + // Get Data + Totals
155 + $data = array();
156 + $totals = array();
157 + for ($r=($rowbegin-1);$r<$rowend;$r++) {
158 + for ($c=($colbegin-1);$c<$colend;$c++) {
159 + if (isset($g['data'][$r][$c])) { $g['data'][$r][$c] = floatval($g['data'][$r][$c] ); }
160 + else { $g['data'][$r][$c] = 0; }
161 + if ($dataseries=='rows') {
162 + $data[($r+1-$rowbegin)][($c+1-$colbegin)] = $g['data'][$r][$c] ;
163 + $totals[($r+1-$rowbegin)] += $g['data'][$r][$c] ;
164 + }
165 + else {
166 + $data[($c+1-$colbegin)][($r+1-$rowbegin)] = $g['data'][$r][$c] ;
167 + if (isset($totals[($c+1-$colbegin)])) { $totals[($c+1-$colbegin)] += $g['data'][$r][$c] ; }
168 + else { $totals[($c+1-$colbegin)] = $g['data'][$r][$c] ; }
169 + }
170 + }
171 + }
172 + // PERCENT
173 + if ($percent && $type != 'pie' && $type != 'pie3d') {
174 + for ($r=0;$r<count($data);$r++) {
175 + for ($c=0;$c<count($data[$r]);$c++) {
176 + $data[$r][$c] = $data[$r][$c]/$totals[$r] * 100;
177 + }
178 + }
179 + }
180 + // Get Legends and labels
181 + $legends = array();
182 + $labels = array();
183 + $longestlegend = 0;
184 + $longestlabel = 0;
185 + if ($dataseries=='cols') {
186 + if ($colbegin>1) {
187 + for ($r=($rowbegin-1);$r<$rowend;$r++) {
188 + $legends[($r+1-$rowbegin)] = $g['data'][$r][0] ;
189 + $longestlegend = max($longestlegend, strlen( $g['data'][$r][0] ));
190 + }
191 + }
192 + if ($rowbegin>1) {
193 + for ($c=($colbegin-1);$c<$colend;$c++) {
194 + $labels[($c+1-$colbegin)] = $g['data'][0][$c] ;
195 + $longestlabel = max($longestlabel , strlen( $g['data'][0][$c] ));
196 + }
197 + }
198 + }
199 + else if ($dataseries=='rows') {
200 + if ($colbegin>1) {
201 + for ($r=($rowbegin-1);$r<$rowend;$r++) {
202 + $labels[($r+1-$rowbegin)] = $g['data'][$r][0] ;
203 + $longestlabel = max($longestlabel , strlen( $g['data'][$r][0] ));
204 + }
205 + }
206 + if ($rowbegin>1) {
207 + for ($c=($colbegin-1);$c<$colend;$c++) {
208 + $legends[($c+1-$colbegin)] = $g['data'][0][$c] ;
209 + $longestlegend = max($longestlegend, strlen( $g['data'][0][$c] ));
210 + }
211 + }
212 + }
213 + // Default sizes
214 + $defsize = array();
215 + $defsize['pie'] = array('w' => 600, 'h' => 300);
216 + $defsize['pie3d'] = array('w' => 600, 'h' => 300);
217 + $defsize['radar'] = array('w' => 600, 'h' => 300);
218 + $defsize['line'] = array('w' => 600, 'h' => 400);
219 + $defsize['xy'] = array('w' => 600, 'h' => 400);
220 + $defsize['scatter'] = array('w' => 600, 'h' => 400);
221 + $defsize['bar'] = array('w' => 600, 'h' => 400);
222 + $defsize['horiz_bar'] = array('w' => 600, 'h' => 500);
223 +
224 +
225 + // Use default ratios
226 + if ($w && !$h) { $h = $w*$defsize[$type]['h']/$defsize[$type]['w']; }
227 + if ($h && !$w) { $w = $h*$defsize[$type]['w']/$defsize[$type]['h']; }
228 + if (!$h && !$w) { $w = $defsize[$type]['w']; $h = $defsize[$type]['h']; }
229 +
230 +
231 + if (count($data)>0 && $type) {
232 + $figure_file = "graph_cache/".rand(11111,999999999).".".$img_type;
233 + if ($bandw) { $colours = array('snow1','black','snow4','snow3','snow2','cadetblue4','cadetblue3','cadetblue1','bisque4','bisque2','beige'); }
234 + else { $colours = array('cyan','darkorchid4','cadetblue3','khaki1','darkolivegreen2','cadetblue4','coral','cyan4','rosybrown3','wheat1'); }
235 + $fills = array('navy','orange','red','yellow','purple','navy','orange','red','yellow','purple');
236 + $patterns = array(PATTERN_DIAG1,PATTERN_CROSS1,PATTERN_STRIPE1,PATTERN_DIAG3,PATTERN_CROSS2,PATTERN_DIAG2,PATTERN_DIAG4,PATTERN_CROSS3, PATTERN_CROSS4,PATTERN_STRIPE1);
237 + $markers = array(MARK_DIAMOND, MARK_SQUARE, MARK_CIRCLE, MARK_UTRIANGLE, MARK_DTRIANGLE, MARK_FILLEDCIRCLE, MARK_CROSS, MARK_STAR, MARK_X);
238 +
239 + // LEGENDS
240 + if ($type == 'pie' || $type == 'pie3d') {
241 + $graph = new PieGraph (($w*$k),($h*$k));
242 + }
243 + else if ($type == 'radar') {
244 + $graph = new RadarGraph(($w*$k),($h*$k));
245 + }
246 + else {
247 + $graph = new Graph(($w*$k),($h*$k));
248 + }
249 +
250 +// mPDF 4.5.009
251 +// $graph->img->SetImgFormat($img_type) ;
252 +// if (strtoupper($img_type)=='JPEG') { $graph->img->SetQuality(90); }
253 + if ($antialias) { $graph->img->SetAntiAliasing(); }
254 + $graph->SetShadow(true, 2*$k);
255 + $graph->SetMarginColor("white");
256 + // TITLE
257 + $graph->title->Set($title);
258 + $graph->title->SetMargin(10*$k);
259 + $graph->title->SetFont(FF_USERFONT,FS_BOLD,11*$k);
260 + $graph->title->SetColor("black");
261 + $graph->legend->SetLineSpacing(3*$k);
262 + $graph->legend->SetMarkAbsSize(6*$k);
263 + $graph->legend->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
264 +
265 + // Set GRAPH IMAGE MARGINS
266 + if ($type == 'pie' || $type == 'pie3d') {
267 + $psize = 0.3;
268 + $pposxabs = ($w/2);
269 + $pposy = 0.55;
270 + if ($longestlegend) { // if legend showing
271 + $pposxabs -= ((($longestlegend * 5) + 20) / 2);
272 + }
273 + $pposx = ($pposxabs / $w);
274 + $graph->legend->Pos(0.02,0.5,'right','center');
275 + }
276 + else if ($type == 'radar') {
277 + $psize = 0.5;
278 + $pposxabs = ($w/2);
279 + $pposy = 0.55;
280 + if ($longestlabel) { // if legend showing
281 + $pposxabs -= ((($longestlabel * 5) + 20) / 2);
282 + }
283 + $pposx = ($pposxabs / $w);
284 + $graph->legend->Pos(0.02,0.5,'right','center');
285 + }
286 + else if ($type == 'xy' || $type == 'scatter') {
287 + $pml = 50;
288 + $pmr = 20;
289 + $pmt = 60;
290 + $pmb = 50;
291 + $xaxislblmargin = $pmb - 30;
292 + $yaxislblmargin = $pml - 15;
293 + $graph->legend->Pos(0.02,0.1,'right','top');
294 + }
295 + else if ($type == 'line' || $type == 'bar') {
296 + $pml = 50;
297 + $pmr = 20;
298 + $pmt = 60;
299 + $pmb = 50;
300 + $xlangle = 0;
301 + $ll = ($longestlegend * 5); // 45 degrees 8pt fontsize
302 + if ($ll > 5 || ($ll>3 && count($data)>10)) {
303 + $pmb = max($pmb, $ll + 30);
304 + $xlangle = 50;
305 + }
306 + $xaxislblmargin = $pmb - 30;
307 + $yaxislblmargin = $pml - 15;
308 + if ($longestlabel && !$overlap) { // if legend showing
309 + $pmr = ((($longestlabel * 5) + 40));
310 + }
311 + $graph->legend->Pos(0.02,0.1,'right','top');
312 + }
313 + else if ($type == 'horiz_bar') {
314 + $pml = 50;
315 + $pmr = 20;
316 + $pmt = 50;
317 + $pmb = 45;
318 + $ll = ($longestlegend * 6.5); // 8pt fontsize
319 + $pml = max($pml, $ll + 20);
320 + $xaxislblmargin = $pml - 20;
321 + $yaxislblmargin = $pmb - 15;
322 + if ($longestlabel && !$overlap) { // if legend showing
323 + $pmr = ((($longestlabel * 5) + 40));
324 + }
325 + $graph->legend->Pos(0.02,0.1,'right','top');
326 + }
327 +
328 +
329 + // DRAW THE GRAPHS
330 + if ($type == 'pie') {
331 + $p1 = new PiePlot($data[0]);
332 + $p1->SetSliceColors($colours);
333 +
334 + if ($show_values) {
335 + $p1->value->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
336 + if ($percent) { $p1->SetLabelType(PIE_VALUE_PERADJ); } //PIE_VAL_PER = default
337 + else { $p1->SetLabelType(PIE_VALUE_ABS); }
338 + if ($percent || $show_percent) { $p1->value->SetFormat("%d%%"); }
339 + else { $p1->value->SetFormat("%s"); }
340 + // Enable and set policy for guide-lines. Make labels line up vertically
341 + $p1->SetGuideLines(true);
342 + $p1->SetGuideLinesAdjust(1.5);
343 + }
344 + else { $p1->value->Show(false); }
345 + $p1->SetLegends($legends);
346 + $p1->SetSize($psize);
347 + $p1->SetCenter($pposx, $pposy);
348 + if ($labels[0]) {
349 + $graph->subtitle->Set($labels[0]);
350 + $graph->subtitle->SetMargin(10*$k);
351 + $graph->subtitle->SetFont(FF_USERFONT,FS_BOLD,11*$k);
352 + $graph->subtitle->SetColor("black");
353 + }
354 + $graph->Add($p1);
355 + }
356 + else if ($type == 'pie3d') {
357 + $p1 = new PiePlot3d($data[0]);
358 + $p1->SetSliceColors($colours);
359 + if ($show_values) {
360 + $p1->value->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
361 + if ($percent) { $p1->SetLabelType(PIE_VALUE_PERADJ); } //PIE_VAL_PER = default
362 + else { $p1->SetLabelType(PIE_VALUE_ABS); }
363 + if ($percent || $show_percent) { $p1->value->SetFormat("%d%%"); }
364 + else { $p1->value->SetFormat("%s"); }
365 + }
366 + else { $p1->value->Show(false); }
367 + $p1->SetLegends($legends);
368 + $p1->SetEdge();
369 + $p1->SetSize($psize);
370 + $p1->SetCenter($pposx, $pposy);
371 +
372 + if ($labels[0]) {
373 + $graph->subtitle->Set($labels[0]);
374 + $graph->subtitle->SetMargin(10*$k);
375 + $graph->subtitle->SetFont(FF_USERFONT,FS_BOLD,11*$k);
376 + $graph->subtitle->SetColor("black");
377 + }
378 +
379 + $graph->Add( $p1);
380 + }
381 + // RADAR
382 + else if ($type == 'radar') {
383 + $graph->SetSize($psize);
384 + $graph->SetPos($pposx, $pposy);
385 +
386 + $graph->SetTitles( $legends); // labels each axis
387 +
388 + $graph->axis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
389 + $graph->axis->title->SetMargin(5*$k);
390 + $graph->axis->SetWeight(1*$k);
391 + $graph->axis->HideLabels();
392 + $graph->axis->SetFont(FF_USERFONT,FS_NORMAL,6*$k);
393 + $graph->HideTickMarks();
394 +
395 + $group = array();
396 + foreach($data AS $series => $dat) {
397 + $rdata = array();
398 + foreach($data[$series] AS $row) { $rdata[] = $row; }
399 + if (count($rdata)<3) { die("ERROR::Graph::Cannot create a Radar Plot with less than 3 data points."); }
400 + // Create the radar plot
401 + $bplot = new RadarPlot($rdata);
402 + $bplot->mark->SetType($markers[$series]);
403 + $bplot->mark->SetFillColor($colours[$series]);
404 + $bplot->mark->SetWidth(3*$k);
405 + $bplot->SetColor($colours[$series]);
406 + if ($series == 0) { $bplot->SetFillColor('lightred'); }
407 + else { $bplot->SetFill(false); }
408 + $bplot->SetLineWeight(1*$k);
409 + $bplot->SetLegend($labels[$series]);
410 + if ($bandw) { $bplot->SetShadow("gray5"); }
411 + $graph->Add($bplot);
412 + }
413 + }
414 + // LINE
415 + else if ($type == 'line') {
416 + // Setup the graph.
417 + $graph->img->SetMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
418 + $graph->SetScale($axes);
419 + $graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
420 +
421 + if ($ylabel) {
422 + $graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
423 + $graph->yaxis->SetTitle($ylabel,'middle');
424 + $graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
425 + }
426 +
427 + $graph->yaxis->SetLabelMargin(4*$k);
428 + if ($percent || $show_percent) { $graph->yaxis->SetLabelFormat('%d%%'); } // Percent
429 +
430 + // Show 0 label on Y-axis (default is not to show)
431 + $graph->yscale->ticks->SupressZeroLabel(true);
432 + if ($hide_y_axis) { $graph->yaxis->Hide(); }
433 + if ($hide_grid) { $graph->ygrid->Show(false); }
434 +
435 + // Setup X-axis labels
436 + $graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
437 + $graph->xaxis->SetTickLabels($legends);
438 + $graph->xaxis->SetLabelAngle($xlangle);
439 + $graph->xaxis->SetLabelMargin(4*$k);
440 + // X-axis title
441 + if ($xlabel) {
442 + $graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
443 + $graph->xaxis->SetTitle($xlabel,'middle');
444 + $graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
445 + }
446 + foreach($data AS $series => $rdata) {
447 + $bplot = new LinePlot($rdata);
448 + $bplot->mark->SetType($markers[$series]);
449 + $bplot->mark->SetFillColor($colours[$series]);
450 + $bplot->mark->SetWidth(4*$k);
451 + if ($show_values) {
452 + $bplot->value-> Show(); // Not if scatter
453 + $bplot->value->SetMargin(6*$k);
454 + $bplot->value->SetColor("darkred");
455 + $bplot->value->SetFont( FF_USERFONT, FS_NORMAL, 8*$k);
456 + if ($percent || $show_percent) { $bplot->value->SetFormat( '%d%%'); }
457 + else { $bplot->value->SetFormat("%s"); }
458 + }
459 + // Set color for each line
460 + $bplot->SetColor($colours[$series]);
461 + $bplot->SetWeight(2*$k);
462 + $bplot->SetLegend($labels[$series]);
463 + if ($bandw) { $bplot->SetShadow("gray5"); }
464 + // Indent the X-scale so the first and last point doesn't fall on the edges
465 + $bplot->SetCenter();
466 + $graph->Add($bplot);
467 + }
468 +
469 + }
470 + // XY or SCATTER
471 + else if ($type == 'xy' || $type == 'scatter') {
472 + // Setup the graph.
473 + $graph->img->SetMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
474 + $graph->SetScale($axes);
475 + // Setup font for axis
476 + $graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
477 + // Y-axis title
478 + if ($labels[1]) {
479 + $graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
480 + $graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
481 + $graph->yaxis->SetTitle($labels[1],'middle');
482 + }
483 +
484 +
485 + $graph->yaxis->SetLabelMargin(4*$k);
486 + if ($percent || $show_percent) { $graph->yaxis->SetLabelFormat('%d%%'); } // Percent
487 +
488 + // Show 0 label on Y-axis (default is not to show)
489 + $graph->yscale->ticks->SupressZeroLabel(true);
490 + // Just let the maximum be autoscaled
491 + $graph->yaxis->scale->SetAutoMin(0);
492 + if ($hide_y_axis) { $graph->yaxis->Hide(); }
493 + if ($hide_grid) { $graph->ygrid->Show(false); }
494 +
495 + // Setup X-axis labels
496 + $graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
497 +// mPDF 2.5 Corrects labelling of x-axis
498 +// $graph->xaxis->SetTickLabels($legends);
499 + $graph->xaxis->SetLabelAngle(50);
500 + $graph->xaxis->SetLabelMargin(4*$k);
501 + // X-axis title
502 + if ($labels[0]) {
503 + $graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
504 + $graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
505 + $graph->xaxis->SetTitle($labels[0],'middle');
506 + }
507 +
508 + // Create the bar plot
509 + // SPLINES
510 + if ($splines && $type=='xy') {
511 + $spline = new Spline($data[0],$data[1]);
512 + list($newx,$newy) = $spline->Get(100);
513 + }
514 + else {
515 + $newx = $data[0];
516 + $newy = $data[1];
517 + }
518 +
519 + if ($type=='xy') {
520 + // LINE PLOT
521 + $bplot = new LinePlot($newy, $newx);
522 + // Set color for each line
523 + $bplot->SetColor($fills[0]);
524 + $bplot->SetWeight(4*$k);
525 + if ($bandw) { $bplot->SetShadow("gray5"); }
526 + $graph->Add($bplot);
527 + }
528 +
529 + // SCATTER PLOT
530 + $cplot = new ScatterPlot($data[1], $data[0]);
531 +
532 + $cplot->mark->SetType($markers[0]);
533 + $cplot->mark->SetFillColor($fills[0]);
534 + $cplot->mark->SetWidth(8*$k);
535 + if ($show_values) {
536 +// mPDF 2.5
537 + if ($type=='xy') { $cplot->value->Show(); } // Not if scatter
538 + $cplot->value->SetMargin(8*$k);
539 + $cplot->value->SetColor("darkred");
540 + $cplot->value->SetFont( FF_USERFONT, FS_NORMAL, 6*$k);
541 +
542 + if ($percent || $show_percent) { $cplot->value->SetFormat( '%d%%'); }
543 + else { $cplot->value->SetFormat("%s"); }
544 + }
545 +
546 + // Set color for each line
547 + $cplot->SetColor($fills[0]);
548 + $cplot->SetWeight(4*$k);
549 + if ($bandw) { $cplot->SetShadow("gray5"); }
550 + $graph->Add($cplot);
551 +
552 + }
553 + // BAR
554 + else if ($type == 'bar') {
555 + // Setup the graph.
556 + $graph->img->SetMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
557 + $graph->SetScale($axes);
558 + // Setup y-axis
559 + $graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
560 + if ($hide_y_axis) { $graph->yaxis->Hide(); }
561 + if ($hide_grid) { $graph->ygrid->Show(false); }
562 + $graph->yaxis->SetLabelMargin(4*$k);
563 + if ($ylabel) {
564 + $graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
565 + $graph->yaxis->SetTitle($ylabel,'middle');
566 + $graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
567 + }
568 + // Show 0 label on Y-axis (default is not to show)
569 + $graph->yscale->ticks->SupressZeroLabel(false);
570 + // Setup X-axis labels
571 + $graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
572 + $graph->xaxis->SetTickLabels($legends);
573 + $graph->xaxis->SetLabelAngle($xlangle);
574 + $graph->xaxis->SetLabelMargin(4*$k);
575 + // X-axis title
576 + if ($xlabel) {
577 + $graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
578 + $graph->xaxis->SetTitle($xlabel,'middle');
579 + $graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
580 + }
581 +
582 + $group = array();
583 + foreach($data AS $series => $dat) {
584 + $rdata = array();
585 + foreach($data[$series] AS $row) { $rdata[] = $row; }
586 +
587 + // Create the bar plot
588 + $bplot = new BarPlot($rdata);
589 + $bplot->SetWidth(0.6); // for SINGLE??
590 + // Setup color for gradient fill style
591 + if ($bandw) { $bplot->SetPattern( $patterns[$series]); }
592 + else { $bplot->SetFillGradient($fills[$series],"#EEEEEE",GRAD_LEFT_REFLECTION); }
593 +
594 + // Set color for the frame of each bar
595 + $bplot->SetColor("darkgray");
596 + $bplot->SetLegend($labels[$series]);
597 + if ($bandw) { $bplot->SetShadow("gray5"); }
598 + if ($show_values) {
599 + $bplot->value->Show();
600 + $bplot->value->SetMargin(6*$k);
601 + $bplot->value->SetColor("darkred");
602 + $bplot->value->SetFont( FF_USERFONT, FS_NORMAL, 8*$k);
603 + if ($percent || $show_percent) { $bplot->value->SetFormat( '%d%%'); }
604 + else { $bplot->value->SetFormat("%s"); }
605 + }
606 +
607 + $group[] = $bplot;
608 + }
609 + if (count($data)==1) {
610 + $graph->Add($group[0]);
611 + }
612 + else {
613 + // Create the grouped bar plot
614 + if ($stacked) {
615 + $gbplot = new AccBarPlot ($group);
616 + }
617 + else {
618 + $gbplot = new GroupBarPlot ($group);
619 + }
620 + $graph->Add($gbplot);
621 + }
622 + }
623 + else if ($type == 'horiz_bar') {
624 + $graph->SetScale($axes);
625 + $graph->Set90AndMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
626 +
627 + // Setup y-axis
628 + $graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
629 + $graph->yaxis->SetLabelMargin(4*$k);
630 +
631 + $graph->yaxis->SetPos('max'); // Intersect at top of x-axis i.e. y axis is at bottom
632 + // First make the labels look right
633 + $graph->yaxis->SetLabelAlign('center','top');
634 + if ($percent || $show_percent) { $graph->yaxis->SetLabelFormat('%d%%'); }
635 + $graph->yaxis->SetLabelSide(SIDE_RIGHT);
636 + $graph->yaxis->scale->SetGrace(10); // sets 10% headroom
637 + if ($hide_y_axis) { $graph->yaxis->Hide(); }
638 + if ($hide_grid) { $graph->ygrid->Show(false); }
639 +
640 + // The fix the tick marks
641 + $graph->yaxis->SetTickSide(SIDE_LEFT);
642 + if ($ylabel) {
643 + $graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
644 + $graph->yaxis->SetTitle($ylabel,'middle');
645 + $graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
646 + // Finally setup the title
647 + $graph->yaxis->SetTitleSide(SIDE_RIGHT);
648 + // To align the title to the right use :
649 + $graph->yaxis->title->Align('right');
650 + $graph->yaxis->title->SetAngle(0);
651 +
652 + }
653 +
654 + // Show 0 label on Y-axis (default is not to show)
655 + $graph->yscale->ticks->SupressZeroLabel(false);
656 + // Setup X-axis labels
657 + $graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
658 + $graph->xaxis->title->SetAngle(90);
659 + $graph->xaxis->SetTickLabels($legends);
660 + $graph->xaxis->SetLabelMargin(4*$k);
661 + // X-axis title
662 + if ($xlabel) {
663 + $graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
664 + $graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
665 + $graph->xaxis->SetTitle($xlabel,'middle');
666 + }
667 + $group = array();
668 + foreach($data AS $series => $dat) {
669 + $rdata = array();
670 + foreach($data[$series] AS $row) { $rdata[] = $row; }
671 + // Create the bar pot
672 + $bplot = new BarPlot($rdata);
673 + $bplot->SetWidth(0.6); // for SINGLE??
674 + // Setup color for gradient fill style
675 + if ($bandw) { $bplot->SetPattern( $patterns[$series]); }
676 + else { $bplot->SetFillGradient($fills[$series],"#EEEEEE",GRAD_LEFT_REFLECTION); }
677 +
678 + // Set color for the frame of each bar
679 + $bplot->SetColor("darkgray");
680 + $bplot->SetLegend($labels[$series]);
681 + if ($bandw) { $bplot->SetShadow("gray5"); }
682 + if ($show_values) {
683 + $bplot->value-> Show();
684 + $bplot->value->SetMargin(6*$k);
685 + $bplot->value->SetColor("darkred");
686 + $bplot->value->SetFont( FF_USERFONT, FS_NORMAL, 8*$k);
687 + if ($percent || $show_percent) { $bplot->value->SetFormat( '%d%%'); }
688 + else { $bplot->value->SetFormat("%s"); }
689 + }
690 +
691 + $group[] = $bplot;
692 + }
693 + if (count($data)==1) {
694 + $graph->Add($group[0]);
695 + }
696 + else {
697 + // Create the grouped bar plot
698 + if ($stacked) {
699 + $gbplot = new AccBarPlot ($group);
700 + }
701 + else {
702 + $gbplot = new GroupBarPlot ($group);
703 + }
704 + $graph->Add($gbplot);
705 + }
706 + }
707 + if ($graph) {
708 + $graph->Stroke( _MPDF_PATH.$figure_file);
709 + $srcpath = str_replace("\\","/",dirname(__FILE__)) . "/";
710 + $srcpath .= $figure_file;
711 + return array('file'=>$srcpath, 'w'=>$w, 'h'=>$h);
712 + }
713 + }
714 + return false;
715 +}
716 +//======================================================================================================
717 +//======================================================================================================
718 +//======================================================================================================
719 +//======================================================================================================
720 +
721 +?>