1 | <?php // content="text/plain; charset=utf-8" |
---|
2 | require_once ('jpgraph/jpgraph.php'); |
---|
3 | require_once ('jpgraph/jpgraph_scatter.php'); |
---|
4 | |
---|
5 | // Each ballon is specificed by four values. |
---|
6 | // (X,Y,Size,Color) |
---|
7 | $data = array( |
---|
8 | array(1,12,10,'orange'), |
---|
9 | array(3,41,15,'red'), |
---|
10 | array(4,5,19,'lightblue'), |
---|
11 | array(5,70,22,'yellow') |
---|
12 | ); |
---|
13 | |
---|
14 | |
---|
15 | |
---|
16 | // We need to create X,Y data vectors suitable for the |
---|
17 | // library from the above raw data. |
---|
18 | $n = count($data); |
---|
19 | for( $i=0; $i < $n; ++$i ) { |
---|
20 | |
---|
21 | $datax[$i] = $data[$i][0]; |
---|
22 | $datay[$i] = $data[$i][1]; |
---|
23 | |
---|
24 | // Create a faster lookup array so we don't have to search |
---|
25 | // for the correct values in the callback function |
---|
26 | $format[strval($datax[$i])][strval($datay[$i])] = array($data[$i][2],$data[$i][3]); |
---|
27 | |
---|
28 | } |
---|
29 | |
---|
30 | |
---|
31 | // Callback for markers |
---|
32 | // Must return array(width,border_color,fill_color,filename,imgscale) |
---|
33 | // If any of the returned values are '' then the |
---|
34 | // default value for that parameter will be used (possible empty) |
---|
35 | function FCallback($aYVal,$aXVal) { |
---|
36 | global $format; |
---|
37 | return array($format[strval($aXVal)][strval($aYVal)][0],'', |
---|
38 | $format[strval($aXVal)][strval($aYVal)][1],'',''); |
---|
39 | } |
---|
40 | |
---|
41 | // Setup a basic graph |
---|
42 | $graph = new Graph(450,300,'auto'); |
---|
43 | $graph->SetScale("intlin"); |
---|
44 | $graph->SetMargin(40,40,40,40); |
---|
45 | $graph->SetMarginColor('wheat'); |
---|
46 | |
---|
47 | $graph->title->Set("Example of ballon scatter plot with X,Y callback"); |
---|
48 | $graph->title->SetFont(FF_ARIAL,FS_BOLD,12); |
---|
49 | $graph->title->SetMargin(10); |
---|
50 | |
---|
51 | // Use a lot of grace to get large scales since the ballon have |
---|
52 | // size and we don't want them to collide with the X-axis |
---|
53 | $graph->yaxis->scale->SetGrace(50,10); |
---|
54 | $graph->xaxis->scale->SetGrace(50,10); |
---|
55 | |
---|
56 | // Make sure X-axis as at the bottom of the graph and not at the default Y=0 |
---|
57 | $graph->xaxis->SetPos('min'); |
---|
58 | |
---|
59 | // Set X-scale to start at 0 |
---|
60 | $graph->xscale->SetAutoMin(0); |
---|
61 | |
---|
62 | // Create the scatter plot |
---|
63 | $sp1 = new ScatterPlot($datay,$datax); |
---|
64 | $sp1->mark->SetType(MARK_FILLEDCIRCLE); |
---|
65 | |
---|
66 | // Uncomment the following two lines to display the values |
---|
67 | $sp1->value->Show(); |
---|
68 | $sp1->value->SetFont(FF_FONT1,FS_BOLD); |
---|
69 | |
---|
70 | // Specify the callback |
---|
71 | $sp1->mark->SetCallbackYX("FCallback"); |
---|
72 | |
---|
73 | // Add the scatter plot to the graph |
---|
74 | $graph->Add($sp1); |
---|
75 | |
---|
76 | // ... and send to browser |
---|
77 | $graph->Stroke(); |
---|
78 | |
---|
79 | ?> |
---|
80 | |
---|
81 | |
---|