UNPKG

dygraphs

Version:

dygraphs is a fast, flexible open source JavaScript charting library.

90 lines (79 loc) 3.15 kB
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>dygraphs Equation Plotter</title> <link rel="stylesheet" type="text/css" href="../dist/dygraph.css" /> <link rel="stylesheet" type="text/css" href="../common/vextlnk.css" /> <script type="text/javascript" src="../dist/dygraph.js"></script> <script type="text/javascript"><!--//--><![CDATA[//><!-- function plot() { var eq = document.getElementById("eq").value; eval("fn = " + eq); var graph = document.getElementById("graph_div"); var width = parseInt(graph.style.width); var x1 = parseFloat(document.getElementById("x1").value); var x2 = parseFloat(document.getElementById("x2").value); var xs = 1.0 * (x2 - x1) / width; var data = []; for (var i = 0; i < width; i++) { var x = x1 + i * xs; var y = fn(x); var row = [x]; if (y.length > 0) { for (var j = 0; j < y.length; j++) { row.push(y[j]); } } else { row.push(y); } data.push(row); } var labels = ['X']; if (data[0].length == 2) { labels.push('Y'); } else { for (var i = 1; i < data[0].length; i++) { labels.push('Y' + (1 + i)); } } g = new Dygraph(graph, data, { labels: labels }); } function preset() { var sel = document.getElementById("presets").selectedIndex; var id = document.getElementById("presets").options[sel].id; var presets = { 'id': [ -10, 10, 'function(x) {\n return x;\n}' ], 'sine': [ -10, 10, 'function(x) {\n return Math.sin(x);\n}' ], 'taylor': [ -3, 3, 'function(x) {\n return [Math.cos(x), 1 - x*x/2 + x*x*x*x/24];\n}' ], 'sawtooth': [-10, 10, 'function(x) {\n var y = 0;\n for (var i = 1; i < 20; i+=2) {\n y += Math.sin(i * x)/i;\n }\n var final = 1 - 2*(Math.abs(Math.floor(x / Math.PI)) % 2);\n return [4/Math.PI * y, final];\n}' ] }; if (id == "custom") { return; } document.getElementById("x1").value = presets[id][0]; document.getElementById("x2").value = presets[id][1]; document.getElementById("eq").value = presets[id][2]; plot(); } //--><!]]></script> </head> <body onload="preset()"> <p><b>Equation: </b><br /> <textarea cols="40" rows="10" id="eq">function(x) { return [0.1 * x, 0.1 * x + Math.sin(x), 0.1*x + Math.cos(x)]; }</textarea><br /> <b>Preset functions:</b> <select id=presets onchange="preset()"> <option id=custom>(custom)</option> <option id=id>Identity</option> <option id=sine>Sine Wave</option> <option id=taylor>Taylor series</option> <option selected id=sawtooth>Sawtooth</option> </select> </p> <p><b>x range: </b> <input type=text width="5" id="x1" value="-10" /> to <input type=text width="5" id="x2" value="10" /></p> <p><input type=button value="Plot" onClick="plot()" /></p> <div id="graph_div" style="width:1024px; height:400px;"></div> </body> </html>