balloonex2.php

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    <?php // content="text/plain; charset=utf-8"
    require_once ('jpgraph/jpgraph.php');
    require_once ('jpgraph/jpgraph_scatter.php');

    // Each ballon is specificed by four values.
    // (X,Y,Size,Color)
    $data = array(
        array(1,12,10,'orange'),
        array(3,41,15,'red'),
        array(4,5,19,'lightblue'),
        array(5,70,22,'yellow')
    );

    // We need to create X,Y data vectors suitable for the
    // library from the above raw data.
    $n = count($data);
    for( $i=0; $i < $n; ++$i ) {

        $datax[$i] = $data[$i][0];
        $datay[$i] = $data[$i][1];

        // Create a faster lookup array so we don't have to search
        // for the correct values in the callback function
        $format[strval($datax[$i])][strval($datay[$i])] = array($data[$i][2],$data[$i][3]);

    }

    // Callback for markers
    // Must return array(width,border_color,fill_color,filename,imgscale)
    // If any of the returned values are '' then the
    // default value for that parameter will be used (possible empty)
    function FCallback($aYVal,$aXVal) {
        global $format;
        return array($format[strval($aXVal)][strval($aYVal)][0],'',
             $format[strval($aXVal)][strval($aYVal)][1],'','');
    }

    // Setup a basic graph
    $graph = new Graph(450,300,'auto');
    $graph->SetScale("intlin");
    $graph->SetMargin(40,40,40,40);
    $graph->SetMarginColor('wheat');

    $graph->title->Set("Example of ballon scatter plot with X,Y callback");
    $graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
    $graph->title->SetMargin(10);

    // Use a lot of grace to get large scales since the ballon have
    // size and we don't want them to collide with the X-axis
    $graph->yaxis->scale->SetGrace(50,10);
    $graph->xaxis->scale->SetGrace(50,10);

    // Make sure X-axis as at the bottom of the graph and not at the default Y=0
    $graph->xaxis->SetPos('min');

    // Set X-scale to start at 0
    $graph->xscale->SetAutoMin(0);

    // Create the scatter plot
    $sp1 = new ScatterPlot($datay,$datax);
    $sp1->mark->SetType(MARK_FILLEDCIRCLE);

    // Uncomment the following two lines to display the values
    $sp1->value->Show();
    $sp1->value->SetFont(FF_FONT1,FS_BOLD);

    // Specify the callback
    $sp1->mark->SetCallbackYX("FCallback");

    // Add the scatter plot to the graph
    $graph->Add($sp1);

    // ... and send to browser
    $graph->Stroke();

    ?>