| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| |
| <link href="../src/nv.d3.css" rel="stylesheet" type="text/css"> |
| <link href="teststyle.css" rel="stylesheet" type='text/css'> |
| <style> |
| |
| </style> |
| <body> |
| <h3>Test cases for Domain and Range overrides - Example of a polylinear scale</h3> |
| <div style='position:relative;'> |
| <div class='navigation'> |
| Tests: |
| <a href="lineChartTest.html">Line Chart</a> |
| <a href="stackedAreaChartTest.html">Stacked Area</a> |
| <a href="../examples/cumulativeLineChart.html">Cumulative Line</a> |
| <a href="ScatterChartTest.html">Scatter</a> |
| <a href="pieChartTest.html">Pie chart</a> |
| </div> |
| <div class='chart full' id='chart1'> |
| Line chart: yDomain = [0,2,200], yRange = [500,50,0] |
| <svg></svg> |
| </div> |
| <div class='chart half with-transitions' id='chart2'> |
| Historical bar chart: yDomain = [0,2,130], yRange = [500,50,0] |
| <svg></svg> |
| </div> |
| |
| <div class='half'> |
| Notes: |
| The chart.yRange() and chart.xRange() properties are an advanced feature. They are useful |
| in situations where your data has wild extremes: ie, you have lots of smaller numbers, and lots of really big numbers.<br/><br/> |
| |
| Without a polylinear scale, those really big data points will overwhelm the small points.<br/><br/> |
| |
| Please look at the examples to understand how polylinear scales work. Comment/uncomment the lines that alter yDomain and yRange |
| to see the effect it has on the charts. |
| </div> |
| </div> |
| |
| <script src="../lib/d3.v3.js"></script> |
| <script src="../nv.d3.js"></script> |
| <script src="../src/tooltip.js"></script> |
| <script src="../src/utils.js"></script> |
| <script src="../src/interactiveLayer.js"></script> |
| <script src="../src/models/legend.js"></script> |
| <script src="../src/models/axis.js"></script> |
| <script src="../src/models/scatter.js"></script> |
| <script src="../src/models/line.js"></script> |
| <script src="../src/models/lineChart.js"></script> |
| <script src="../src/models/historicalBar.js"></script> |
| <script src="../src/models/historicalBarChart.js"></script> |
| <script> |
| |
| //------------ CHART 1 |
| lineChartConfig("chart1", sinAndCos(),true, false); |
| barChartConfig(dataWithSpikes()); |
| |
| |
| function lineChartConfig(containerid, data, guideline, useDates, auxOptions) { |
| if (auxOptions === undefined) auxOptions = {}; |
| if (guideline === undefined) guideline = true; |
| nv.addGraph(function() { |
| var chart; |
| chart = nv.models.lineChart().useInteractiveGuideline(guideline); |
| |
| var fullChartHeight = 500 - chart.margin().top - chart.margin().bottom; |
| chart |
| .x(function(d,i) { |
| return d.x; |
| }) |
| .yDomain([0,2,200]) //Using a polylinear scale |
| .yRange([fullChartHeight,50,0]) |
| ; |
| |
| if (auxOptions.width) |
| chart.width(auxOptions.width); |
| |
| if (auxOptions.height) |
| chart.height(auxOptions.height); |
| |
| var formatter; |
| if (useDates) { |
| formatter = function(d,i) { |
| var now = (new Date()).getTime() - 86400 * 1000 * 365; |
| now = new Date(now + d * 86400 * 1000); |
| return d3.time.format('%b %d %Y')(now ); |
| } |
| } |
| else { |
| formatter = d3.format(",.1f"); |
| } |
| |
| chart.xAxis // chart sub-models (ie. xAxis, yAxis, etc) when accessed directly, return themselves, not the parent chart, so need to chain separately |
| .tickFormat( |
| formatter |
| ); |
| |
| chart.yAxis |
| .axisLabel('Voltage (v)') |
| .tickFormat(d3.format(',.2f')); |
| |
| d3.select('#' + containerid + ' svg') |
| .datum(data) |
| .transition().duration(500) |
| .call(chart); |
| |
| nv.utils.windowResize(chart.update); |
| |
| return chart; |
| }); |
| } |
| |
| function barChartConfig(data) { |
| nv.addGraph(function() { |
| var chart = nv.models.historicalBarChart(); |
| var fullChartHeight = 500 - chart.margin().top - chart.margin().bottom; |
| chart.color(["#ff7f0e"]) |
| .yDomain([0,2,130]) |
| .yRange([fullChartHeight,50,0]) |
| .transitionDuration(500) |
| ; |
| |
| chart.xAxis |
| .tickFormat(d3.format(',.1f')) |
| .axisLabel("Time") |
| ; |
| |
| chart.yAxis |
| .axisLabel('Random Number') |
| .tickFormat(d3.format(',.4f')); |
| d3.select("#chart2 svg") |
| .datum(data) |
| .transition().duration(500) |
| .call(chart); |
| |
| nv.utils.windowResize(chart.update); |
| return chart; |
| }); |
| } |
| |
| function sinAndCos() { |
| var sin = [], |
| cos = [], |
| higherOrder = [] |
| ; |
| |
| var now = (new Date()).getTime(); |
| for (var i = 0; i < 100; i++) { |
| sin.push({x: i, y: Math.abs(Math.sin(i/10)) }); //the nulls are to show how defined works |
| cos.push({x: i, y: Math.abs(.5 * Math.cos(i/10)) }); |
| |
| higherOrder.push({x: i, y: Math.cos(i) * 100 + 100}); |
| } |
| |
| return [ |
| { |
| values: sin, |
| key: "Sine Wave", |
| color: "#ff7f0e" |
| }, |
| { |
| values: cos, |
| key: "Cosine Wave", |
| color: "#2ca02c" |
| }, |
| { |
| values: higherOrder, |
| key: "Higher Order", |
| color: "#fc34ff" |
| } |
| ]; |
| } |
| |
| function dataWithSpikes() { |
| var rval = []; |
| for(var i =0; i < 100; i++) { |
| |
| var spike = (Math.random() > 0.9); |
| rval.push({ |
| x: i, |
| y: (spike) ? Math.random() * 100 + 30 : Math.random() |
| }); |
| } |
| return [ |
| {key: "Series 1", |
| color : "orange", |
| values: rval} |
| ]; |
| } |
| |
| </script> |