nvd3/test/polylinearTest.html

193 lines
5.3 KiB
HTML

<!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>