zooming.html 3.33 KB
Newer Older
olau@iola.dk's avatar
olau@iola.dk committed
1 2 3 4 5
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
6
    <link href="layout.css" rel="stylesheet" type="text/css">
7
    <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
olau@iola.dk's avatar
olau@iola.dk committed
8 9
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
10
    <script language="javascript" type="text/javascript" src="../jquery.flot.selection.js"></script>
olau@iola.dk's avatar
olau@iola.dk committed
11 12 13 14 15 16 17 18
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div style="float:left">
      <div id="placeholder" style="width:500px;height:300px"></div>
    </div>
    
19
    <div id="miniature" style="float:left;margin-left:20px">
olau@iola.dk's avatar
olau@iola.dk committed
20 21 22 23 24
      <div id="overview" style="width:166px;height:100px"></div>

      <p id="overviewLegend" style="margin-left:10px"></p>
    </div>

25 26 27 28
    <p style="clear:left">The selection support makes it easy to
    construct flexible zooming schemes. With a few lines of code, the
    small overview plot to the right has been connected to the large
    plot. Try selecting a rectangle on either of them.</p>
olau@iola.dk's avatar
olau@iola.dk committed
29

30
<script id="source">
olau@iola.dk's avatar
olau@iola.dk committed
31 32 33 34
$(function () {
    // setup plot
    function getData(x1, x2) {
        var d = [];
35 36 37 38
        for (var i = 0; i <= 100; ++i) {
            var x = x1 + i * (x2 - x1) / 100;
            d.push([x, Math.sin(x * Math.sin(x))]);
        }
olau@iola.dk's avatar
olau@iola.dk committed
39 40 41 42 43 44 45 46

        return [
            { label: "sin(x sin(x))", data: d }
        ];
    }

    var options = {
        legend: { show: false },
47 48 49 50
        series: {
            lines: { show: true },
            points: { show: true }
        },
51
        yaxis: { ticks: 10 },
olau@iola.dk's avatar
olau@iola.dk committed
52 53 54 55 56 57 58 59 60 61
        selection: { mode: "xy" }
    };

    var startData = getData(0, 3 * Math.PI);
    
    var plot = $.plot($("#placeholder"), startData, options);

    // setup overview
    var overview = $.plot($("#overview"), startData, {
        legend: { show: true, container: $("#overviewLegend") },
62 63 64 65
        series: {
            lines: { show: true, lineWidth: 1 },
            shadowSize: 0
        },
66 67
        xaxis: { ticks: 4 },
        yaxis: { ticks: 3, min: -2, max: 2 },
olau@iola.dk's avatar
olau@iola.dk committed
68 69 70 71 72 73
        grid: { color: "#999" },
        selection: { mode: "xy" }
    });

    // now connect the two
    
74
    $("#placeholder").bind("plotselected", function (event, ranges) {
75
        // clamp the zooming to prevent eternal zoom
76 77 78 79
        if (ranges.xaxis.to - ranges.xaxis.from < 0.00001)
            ranges.xaxis.to = ranges.xaxis.from + 0.00001;
        if (ranges.yaxis.to - ranges.yaxis.from < 0.00001)
            ranges.yaxis.to = ranges.yaxis.from + 0.00001;
80
        
olau@iola.dk's avatar
olau@iola.dk committed
81
        // do the zooming
82
        plot = $.plot($("#placeholder"), getData(ranges.xaxis.from, ranges.xaxis.to),
olau@iola.dk's avatar
olau@iola.dk committed
83
                      $.extend(true, {}, options, {
84 85
                          xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to },
                          yaxis: { min: ranges.yaxis.from, max: ranges.yaxis.to }
olau@iola.dk's avatar
olau@iola.dk committed
86 87
                      }));
        
88 89
        // don't fire event on the overview to prevent eternal loop
        overview.setSelection(ranges, true);
olau@iola.dk's avatar
olau@iola.dk committed
90
    });
91 92
    $("#overview").bind("plotselected", function (event, ranges) {
        plot.setSelection(ranges);
olau@iola.dk's avatar
olau@iola.dk committed
93 94 95 96 97 98
    });
});
</script>

 </body>
</html>