<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<title>Graph2D | Performance</title>
|
|
|
|
<style>
|
|
body, html {
|
|
font-family: arial, sans-serif;
|
|
font-size: 11pt;
|
|
}
|
|
</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>
|
|
<label for="count">Number of items</label>
|
|
<input id="count" value="50000">
|
|
<input id="toggleInterpolation" type="button" value="toggle Interpolation">
|
|
Interpolation method: <input id="interpolation" value="linear">
|
|
<input id="togglePoints" type="button" value="toggle Points">
|
|
Points style: <input id="points" value="none"> <br/><br/>
|
|
<input id="draw" type="button" value="draw" style="width:200px;"> <span id="description"><b>Click the draw button to load the data!</b></span>
|
|
</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,1);
|
|
}
|
|
|
|
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);},1);
|
|
|
|
}
|
|
|
|
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>
|