|
|
- <!DOCTYPE HTML>
- <html>
- <head>
- <title>Graph2d | Performance</title>
-
- <style>
- body, html {
- font-family: arial, sans-serif;
- font-size: 11pt;
- }
- span.label {
- width:150px;
- display:inline-block;
- }
- </style>
-
- <!-- note: moment.js must be loaded before vis.js, else vis.js uses its embedded version of moment.js -->
- <script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.3.1/moment.min.js"></script>
-
- <script src="../../dist/vis.js"></script>
- <link href="../../dist/vis.css" rel="stylesheet" type="text/css" />
- </head>
- <body>
- <h2>Graph2d | Performance</h2>
- <div style="width:700px; font-size:14px; text-align: justify;">
- This example is a test of the performance of the Graph2d. Select the amount of datapoints you want to plot and press draw.
- You can choose between the style of the points as well as the interpolation method. This can only be toggled with the buttons.
- The interpolation options may not look different for this dataset but you can see their effects clearly in example 7.
- <br /><br />
- Linear interpolation and no points are the settings that will render quickest. By default, Graph2d will downsample when there are more
- than 1 point per pixel. This can be manually disabled at the cost of performance by using the <code>sampling</code> option.
- </div>
- <br />
- <p>
- <span class="label">Number of items:</span><input id="count" value="50000">
- <input id="draw" type="button" value="draw" style="width:200px;"> <span id="description"><b>Click the draw button to load the data!</b></span>
- <br />
-
- <span class="label">Interpolation method:</span><input id="interpolation" value="linear">
- <input id="toggleInterpolation" type="button" value="toggle Interpolation" style="width:200px;">
- <br />
- <span class="label">Points style:</span><input id="points" value="none">
- <input id="togglePoints" type="button" value="toggle Points" style="width:200px;">
-
- </p>
- <div id="visualization"></div>
-
- <script>
- var points = 'none';
- var interpolation = 'linear';
-
- function togglePoints() {
- var pointsOptions = {};
- var pointsField = document.getElementById("points");
- if (points == "none") {
- points = 'circle';
- pointsOptions = {drawPoints: {style: points}};
- }
- else if (points == "circle") {
- points = 'square';
- pointsOptions = {drawPoints: {style: points}};
- }
- else if (points == "square") {
- points = 'none';
- pointsOptions = {drawPoints: false};
- }
- pointsField.value = points;
-
- graph2d.setOptions(pointsOptions);
- }
-
- function toggleInterpolation() {
- var interpolationOptions = {};
- var interpolationField = document.getElementById("interpolation");
- if (interpolation == "linear") {
- interpolation = 'centripetal';
- interpolationOptions = {catmullRom: {parametrization: interpolation}};
- }
- else if (interpolation == "centripetal") {
- interpolation = 'chordal';
- interpolationOptions = {catmullRom: {parametrization: interpolation}};
- }
- else if (interpolation == "chordal") {
- interpolation = 'uniform';
- interpolationOptions = {catmullRom: {parametrization: interpolation}};
- }
- else if (interpolation == "uniform") {
- interpolation = 'linear';
- interpolationOptions = {catmullRom: false};
- }
- interpolationField.value = interpolation;
- graph2d.setOptions(interpolationOptions);
- }
-
-
- // create a dataset with items
- var now = moment().minutes(0).seconds(0).milliseconds(0);
- var dataset = new vis.DataSet({
- type: {start: 'ISODate', end: 'ISODate' }
- });
-
-
- var startPoint = now;
- var endPoint = now + 3600000 * 5000;
-
- // create data -- this is seperated into 3 functions so we can update the span.
- function createData() {
- var span = document.getElementById("description");
- span.innerHTML = 'Generating data... (just javascript, not vis.graph2D)...';
- setTimeout(generateData,10);
- }
-
- function generateData() {
- var count = parseInt(document.getElementById('count').value) || 100;
- var newData = [];
- var span = document.getElementById("description");
- var start = now;
- for (var i = 0; i < count; i++) {
- var yval = Math.sin(i/100) * Math.cos(i/50) * 50 + Math.sin(i/1000) * 50;
- newData.push({id: i, x: start + 3600000 * i, y: yval});
- }
- span.innerHTML = 'Loading data into Graph2d...';
- setTimeout(function() {loadDataIntoVis(newData);},10);
-
- }
-
- function loadDataIntoVis(newData) {
- var span = document.getElementById("description");
- dataset.clear();
- dataset.add(newData);
- span.innerHTML = 'Done!';
- }
-
- document.getElementById('draw').onclick = createData;
- document.getElementById('toggleInterpolation').onclick = toggleInterpolation;
- document.getElementById('togglePoints').onclick = togglePoints;
-
- var container = document.getElementById('visualization');
- var options = {
- sampling: true,
- drawPoints: {enabled:false, size:3},
- catmullRom: false,
- start: startPoint,
- end: endPoint
- };
-
- var graph2d = new vis.Graph2d(container, dataset, options);
- </script>
- </body>
- </html>
|