graph.php ➔ print_graph()   F
last analyzed

Complexity

Conditions 209
Paths 0

Size

Total Lines 667
Code Lines 460

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 43890
Metric Value
cc 209
eloc 460
nc 0
nop 2
dl 0
loc 667
ccs 0
cts 535
cp 0
crap 43890
rs 2

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
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++) {
0 ignored issues
show
Performance Best Practice introduced by
It seems like you are calling the size function count() as part of the test condition. You might want to compute the size beforehand, and not on each iteration.

If the size of the collection does not change during the iteration, it is generally a good practice to compute it beforehand, and not on each iteration:

for ($i=0; $i<count($array); $i++) { // calls count() on each iteration
}

// Better
for ($i=0, $c=count($array); $i<$c; $i++) { // calls count() just once
}
Loading history...
175
			for ($c=0;$c<count($data[$r]);$c++) {
0 ignored issues
show
Performance Best Practice introduced by
It seems like you are calling the size function count() as part of the test condition. You might want to compute the size beforehand, and not on each iteration.

If the size of the collection does not change during the iteration, it is generally a good practice to compute it beforehand, and not on each iteration:

for ($i=0; $i<count($array); $i++) { // calls count() on each iteration
}

// Better
for ($i=0, $c=count($array); $i<$c; $i++) { // calls count() just once
}
Loading history...
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
?>