Last active
November 22, 2016 04:53
-
-
Save gotoken/6a32e5d134f9da20b8bb26672d7a6144 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var query = null; | |
function load() { | |
selectDataType(); | |
loadCsvExample(); | |
loadJsonExample(); | |
loadJavascriptExample(); | |
loadGooglespreadsheetExample(); | |
loadDatasourceExample(); | |
draw(); | |
} | |
/** | |
* Upate the UI based on the currently selected datatype | |
*/ | |
function selectDataType() { | |
} | |
function round(value, decimals) { | |
return parseFloat(value.toFixed(decimals)); | |
} | |
function loadCsvExample() { | |
var csv = ""; | |
// headers | |
csv += '"x", "y", "value"\n'; | |
// create some nice looking data with sin/cos | |
var steps = 30; | |
var axisMax = 314; | |
var axisStep = axisMax / steps; | |
for (var x = 0; x < axisMax; x+=axisStep) { | |
for (var y = 0; y < axisMax; y+=axisStep) { | |
var value = Math.sin(x/50) * Math.cos(y/50) * 50 + 50; | |
csv += round(x+10000, 2) + ', ' + round(y+10000, 2) + ', ' + round(value+10000, 2) + '\n'; | |
} | |
} | |
document.getElementById("csvTextarea").innerHTML = csv; | |
// also adjust some settings | |
document.getElementById("style").value = "surface"; | |
document.getElementById("verticalRatio").value = "0.5"; | |
document.getElementById("xLabel").value = "x"; | |
document.getElementById("yLabel").value = "y"; | |
document.getElementById("zLabel").value = "value"; | |
document.getElementById("filterLabel").value = ""; | |
document.getElementById("legendLabel").value = ""; | |
drawCsv(); | |
} | |
function loadCsvAnimationExample() { | |
var csv = ""; | |
// headers | |
csv += '"x", "y", "value", "time"\n'; | |
// create some nice looking data with sin/cos | |
var steps = 20; | |
var axisMax = 314; | |
var tMax = 31; | |
var axisStep = axisMax / steps; | |
for (var t = 0; t < tMax; t++) { | |
for (var x = 0; x < axisMax; x+=axisStep) { | |
for (var y = 0; y < axisMax; y+=axisStep) { | |
var value = Math.sin(x/50 + t/10) * Math.cos(y/50 + t/10) * 50 + 50; | |
csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(value, 2) + ', ' + t + '\n'; | |
} | |
} | |
} | |
document.getElementById("csvTextarea").innerHTML = csv; | |
// also adjust some settings | |
document.getElementById("style").value = "surface"; | |
document.getElementById("verticalRatio").value = "0.5"; | |
document.getElementById("animationInterval").value = 100; | |
document.getElementById("xLabel").value = "x"; | |
document.getElementById("yLabel").value = "y"; | |
document.getElementById("zLabel").value = "value"; | |
document.getElementById("filterLabel").value = "time"; | |
document.getElementById("legendLabel").value = ""; | |
drawCsv(); | |
} | |
function loadCsvLineExample() { | |
var csv = ""; | |
// headers | |
csv += '"sin(t)", "cos(t)", "t"\n'; | |
// create some nice looking data with sin/cos | |
var steps = 100; | |
var axisMax = 314; | |
var tmax = 4 * 2 * Math.PI; | |
var axisStep = axisMax / steps; | |
for (t = 0; t < tmax; t += tmax / steps) { | |
var r = 1; | |
var x = r * Math.sin(t); | |
var y = r * Math.cos(t); | |
var z = t; | |
csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + '\n'; | |
} | |
document.getElementById("csvTextarea").innerHTML = csv; | |
// also adjust some settings | |
document.getElementById("style").value = "line"; | |
document.getElementById("verticalRatio").value = "1.0"; | |
document.getElementById("showPerspective").checked = false; | |
document.getElementById("xLabel").value = "sin(t)"; | |
document.getElementById("yLabel").value = "cos(t)"; | |
document.getElementById("zLabel").value = "t"; | |
document.getElementById("filterLabel").value = ""; | |
document.getElementById("legendLabel").value = ""; | |
drawCsv(); | |
} | |
function loadCsvMovingDotsExample() { | |
var csv = ""; | |
// headers | |
csv += '"x", "y", "z", "color value", "time"\n'; | |
// create some shortcuts to math functions | |
var sin = Math.sin; | |
var cos = Math.cos; | |
var pi = Math.PI; | |
// create the animation data | |
var tmax = 2.0 * pi; | |
var tstep = tmax / 75; | |
var dotCount = 1; // set this to 1, 2, 3, 4, ... | |
for (var t = 0; t < tmax; t += tstep) { | |
var tgroup = parseFloat(t.toFixed(2)); | |
var value = t; | |
// a dot in the center | |
var x = 0; | |
var y = 0; | |
var z = 0; | |
csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n'; | |
// one or multiple dots moving around the center | |
for (var dot = 0; dot < dotCount; dot++) { | |
var tdot = t + 2*pi * dot / dotCount; | |
//data.addRow([sin(tdot), cos(tdot), sin(tdot), value, tgroup]); | |
//data.addRow([sin(tdot), -cos(tdot), sin(tdot + tmax*1/2), value, tgroup]); | |
var x = sin(tdot); | |
var y = cos(tdot); | |
var z = sin(tdot); | |
csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n'; | |
var x = sin(tdot); | |
var y = -cos(tdot); | |
var z = sin(tdot + tmax*1/2); | |
csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n'; | |
} | |
} | |
document.getElementById("csvTextarea").innerHTML = csv; | |
// also adjust some settings | |
document.getElementById("style").value = "dot-color"; | |
document.getElementById("verticalRatio").value = "1.0"; | |
document.getElementById("animationInterval").value = "35"; | |
document.getElementById("animationAutoStart").checked = true; | |
document.getElementById("showPerspective").checked = true; | |
document.getElementById("xLabel").value = "x"; | |
document.getElementById("yLabel").value = "y"; | |
document.getElementById("zLabel").value = "z"; | |
document.getElementById("filterLabel").value = "time"; | |
document.getElementById("legendLabel").value = "color value"; | |
drawCsv(); | |
} | |
function loadCsvColoredDotsExample() { | |
var csv = ""; | |
// headers | |
csv += '"x", "y", "z", "distance"\n'; | |
// create some shortcuts to math functions | |
var sqrt = Math.sqrt; | |
var pow = Math.pow; | |
var random = Math.random; | |
// create the animation data | |
var imax = 200; | |
for (var i = 0; i < imax; i++) { | |
var x = pow(random(), 2); | |
var y = pow(random(), 2); | |
var z = pow(random(), 2); | |
var dist = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2)); | |
csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(dist, 2)+ '\n'; | |
} | |
document.getElementById("csvTextarea").innerHTML = csv; | |
// also adjust some settings | |
document.getElementById("style").value = "dot-color"; | |
document.getElementById("verticalRatio").value = "1.0"; | |
document.getElementById("showPerspective").checked = true; | |
document.getElementById("xLabel").value = "x"; | |
document.getElementById("yLabel").value = "y"; | |
document.getElementById("zLabel").value = "value"; | |
document.getElementById("legendLabel").value = "distance" | |
document.getElementById("filterLabel").value = ""; | |
drawCsv(); | |
} | |
function loadCsvSizedDotsExample() { | |
var csv = ""; | |
// headers | |
csv += '"x", "y", "z", "range"\n'; | |
// create some shortcuts to math functions | |
var sqrt = Math.sqrt; | |
var pow = Math.pow; | |
var random = Math.random; | |
// create the animation data | |
var imax = 200; | |
for (var i = 0; i < imax; i++) { | |
var x = pow(random(), 2); | |
var y = pow(random(), 2); | |
var z = pow(random(), 2); | |
var dist = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2)); | |
var range = sqrt(2) - dist; | |
csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(range, 2)+ '\n'; | |
} | |
document.getElementById("csvTextarea").innerHTML = csv; | |
// also adjust some settings | |
document.getElementById("style").value = "dot-size"; | |
document.getElementById("verticalRatio").value = "1.0"; | |
document.getElementById("showPerspective").checked = true; | |
document.getElementById("xLabel").value = "x"; | |
document.getElementById("yLabel").value = "y"; | |
document.getElementById("zLabel").value = "z"; | |
document.getElementById("legendLabel").value = "range"; | |
document.getElementById("filterLabel").value = ""; | |
drawCsv(); | |
} | |
function loadJsonExample() { | |
} | |
function loadJavascriptExample() { | |
} | |
function loadJavascriptFunctionExample() { | |
} | |
function loadGooglespreadsheetExample() { | |
} | |
function loadDatasourceExample() { | |
} | |
/** | |
* Retrieve teh currently selected datatype | |
* @return {string} datatype | |
*/ | |
function getDataType() { | |
return "csv"; | |
} | |
/** | |
* Retrieve the datatable from the entered contents of the csv text | |
* @param {boolean} [skipValue] | if true, the 4th element is a filter value | |
* @return {vis DataSet} | |
*/ | |
function getDataCsv() { | |
var csv = document.getElementById("csvTextarea").value; | |
// parse the csv content | |
var csvArray = csv2array(csv); | |
var data = new vis.DataSet(); | |
var skipValue = false; | |
if (document.getElementById("filterLabel").value != "" && document.getElementById("legendLabel").value == "") { | |
skipValue = true; | |
} | |
// read all data | |
for (var row = 1; row < csvArray.length; row++) { | |
if (csvArray[row].length == 4 && skipValue == false) { | |
data.add({x:parseFloat(csvArray[row][0]), | |
y:parseFloat(csvArray[row][1]), | |
z:parseFloat(csvArray[row][2]), | |
style:parseFloat(csvArray[row][3])}); | |
} | |
else if (csvArray[row].length == 4 && skipValue == true) { | |
data.add({x:parseFloat(csvArray[row][0]), | |
y:parseFloat(csvArray[row][1]), | |
z:parseFloat(csvArray[row][2]), | |
filter:parseFloat(csvArray[row][3])}); | |
} | |
else if (csvArray[row].length == 5) { | |
data.add({x:parseFloat(csvArray[row][0]), | |
y:parseFloat(csvArray[row][1]), | |
z:parseFloat(csvArray[row][2]), | |
style:parseFloat(csvArray[row][3]), | |
filter:parseFloat(csvArray[row][4])}); | |
} | |
else { | |
data.add({x:parseFloat(csvArray[row][0]), | |
y:parseFloat(csvArray[row][1]), | |
z:parseFloat(csvArray[row][2]), | |
style:parseFloat(csvArray[row][2])}); | |
} | |
} | |
return data; | |
} | |
/** | |
* remove leading and trailing spaces | |
*/ | |
function trim(text) { | |
while (text.length && text.charAt(0) == ' ') | |
text = text.substr(1); | |
while (text.length && text.charAt(text.length-1) == ' ') | |
text = text.substr(0, text.length-1); | |
return text; | |
} | |
/** | |
* Retrieve the datatable from the entered contents of the javascript text | |
* @return {vis Dataset} | |
*/ | |
function getDataJson() { | |
var json = document.getElementById("jsonTextarea").value; | |
var data = new google.visualization.DataTable(json); | |
return data; | |
} | |
/** | |
* Retrieve the datatable from the entered contents of the javascript text | |
* @return {vis Dataset} | |
*/ | |
function getDataJavascript() { | |
var js = document.getElementById("javascriptTextarea").value; | |
eval(js); | |
return data; | |
} | |
/** | |
* Retrieve the datatable from the entered contents of the datasource text | |
* @return {vis Dataset} | |
*/ | |
function getDataDatasource() { | |
} | |
/** | |
* Retrieve a JSON object with all options | |
*/ | |
function getOptions() { | |
return { | |
width: document.getElementById("width").value, | |
height: document.getElementById("height").value, | |
style: document.getElementById("style").value, | |
showAnimationControls: (document.getElementById("showAnimationControls").checked != false), | |
showGrid: (document.getElementById("showGrid").checked != false), | |
showPerspective: (document.getElementById("showPerspective").checked != false), | |
showLegend: (document.getElementById("showLegend").checked != false), | |
showShadow: (document.getElementById("showShadow").checked != false), | |
keepAspectRatio: (document.getElementById("keepAspectRatio").checked != false), | |
verticalRatio: document.getElementById("verticalRatio").value, | |
animationInterval: document.getElementById("animationInterval").value, | |
xLabel: document.getElementById("xLabel").value, | |
yLabel: document.getElementById("yLabel").value, | |
zLabel: document.getElementById("zLabel").value, | |
filterLabel: document.getElementById("filterLabel").value, | |
legendLabel: document.getElementById("legendLabel").value, | |
animationPreload: (document.getElementById("animationPreload").checked != false), | |
animationAutoStart:(document.getElementById("animationAutoStart").checked != false), | |
xCenter: Number(document.getElementById("xCenter").value) || undefined, | |
yCenter: Number(document.getElementById("yCenter").value) || undefined, | |
xMin: Number(document.getElementById("xMin").value) || undefined, | |
xMax: Number(document.getElementById("xMax").value) || undefined, | |
xStep: Number(document.getElementById("xStep").value) || undefined, | |
yMin: Number(document.getElementById("yMin").value) || undefined, | |
yMax: Number(document.getElementById("yMax").value) || undefined, | |
yStep: Number(document.getElementById("yStep").value) || undefined, | |
zMin: Number(document.getElementById("zMin").value) || undefined, | |
zMax: Number(document.getElementById("zMax").value) || undefined, | |
zStep: Number(document.getElementById("zStep").value) || undefined, | |
valueMin: Number(document.getElementById("valueMin").value) || undefined, | |
valueMax: Number(document.getElementById("valueMax").value) || undefined, | |
xBarWidth: Number(document.getElementById("xBarWidth").value) || undefined, | |
yBarWidth: Number(document.getElementById("yBarWidth").value) || undefined | |
}; | |
} | |
/** | |
* Redraw the graph with the entered data and options | |
*/ | |
function draw() { | |
return drawCsv(); | |
} | |
function drawCsv() { | |
// retrieve data and options | |
var data = getDataCsv(); | |
var options = getOptions(); | |
// Creat a graph | |
var graph = new vis.Graph3d(document.getElementById('graph'), data, options); | |
} | |
function drawJson() { | |
// retrieve data and options | |
var data = getDataJson(); | |
var options = getOptions(); | |
// Creat a graph | |
var graph = new vis.Graph3d(document.getElementById('graph'), data, options); | |
} | |
function drawJavascript() { | |
// retrieve data and options | |
var data = getDataJavascript(); | |
var options = getOptions(); | |
// Creat a graph | |
var graph = new vis.Graph3d(document.getElementById('graph'), data, options); | |
} | |
function drawGooglespreadsheet() { | |
// Instantiate our graph object. | |
drawGraph = function(response) { | |
document.getElementById("draw").disabled = ""; | |
if (response.isError()) { | |
error = 'Error: ' + response.getMessage(); | |
document.getElementById('graph').innerHTML = | |
"<span style='color: red; font-weight: bold;'>" + error + "</span>"; ; | |
} | |
// retrieve the data from the query response | |
data = response.getDataTable(); | |
// specify options | |
options = getOptions(); | |
// Instantiate our graph object. | |
var graph = new vis.Graph3d(document.getElementById('graph'), data, options); | |
} | |
url = document.getElementById("googlespreadsheetText").value; | |
document.getElementById("draw").disabled = "disabled"; | |
// send the request | |
query && query.abort(); | |
query = new google.visualization.Query(url); | |
query.send(drawGraph); | |
} | |
function drawDatasource() { | |
// Instantiate our graph object. | |
drawGraph = function(response) { | |
document.getElementById("draw").disabled = ""; | |
if (response.isError()) { | |
error = 'Error: ' + response.getMessage(); | |
document.getElementById('graph').innerHTML = | |
"<span style='color: red; font-weight: bold;'>" + error + "</span>"; ; | |
} | |
// retrieve the data from the query response | |
data = response.getDataTable(); | |
// specify options | |
options = getOptions(); | |
// Instantiate our graph object. | |
var graph = new vis.Graph3d(document.getElementById('graph'), data, options); | |
}; | |
url = document.getElementById("datasourceText").value; | |
document.getElementById("draw").disabled = "disabled"; | |
// if the entered url is a google spreadsheet url, replace the part | |
// "/ccc?" with "/tq?" in order to retrieve a neat data query result | |
if (url.indexOf("/ccc?")) { | |
url.replace("/ccc?", "/tq?"); | |
} | |
// send the request | |
query && query.abort(); | |
query = new google.visualization.Query(url); | |
query.send(drawGraph); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment