PluginProbe
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin / 1.5
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin v1.5
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
pdf-print / mpdf / graph.php

graph.php in PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin 1.5, at mpdf/graph.php

721 lines 26.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 ?>