1 function graph(selector, margins, axes, samples, samplingTimeOffset)
3 var element = document.querySelector(selector);
4 element.innerHTML = '';
6 var size = Point.elementClientSize(element).subtract(margins.size);
8 var x = d3.scale.linear()
9 .range([0, size.width])
10 .domain(d3.extent(samples, function(d) { return d.timeOffset; }));
12 var yLeft = d3.scale.linear()
13 .range([size.height, 0])
14 .domain([0, d3.max(samples, function(d) { return d.values[0]; })]);
16 var yRight = d3.scale.linear()
17 .range([size.height, 0])
18 .domain([0, d3.max(samples, function(d) { return d.values[1]; })]);
20 var xAxis = d3.svg.axis()
24 var yAxisLeft = d3.svg.axis()
28 var yAxisRight = d3.svg.axis()
32 var lineLeft = d3.svg.line()
33 .x(function(d) { return x(d.timeOffset); })
34 .y(function(d) { return yLeft(d.values[0]); });
36 var lineRight = d3.svg.line()
37 .x(function(d) { return x(d.timeOffset); })
38 .y(function(d) { return yRight(d.values[1]); });
40 samples.forEach(function(d) {
41 d.timeOffset = +d.timeOffset;
42 d.values[0] = +d.values[0];
43 d.values[1] = +d.values[1];
46 var sampledSamples = samples.filter(function(d) {
47 return d.timeOffset >= samplingTimeOffset;
50 var meanLeft = d3.mean(sampledSamples, function(d) {
54 var meanRight = d3.mean(sampledSamples, function(d) {
58 var svg = d3.select(selector).append("svg")
59 .attr("width", size.width + margins.left + margins.right)
60 .attr("height", size.height + margins.top + margins.bottom)
62 .attr("transform", "translate(" + margins.left + "," + margins.top + ")");
66 .attr("class", "x axis")
67 .attr("fill", "rgb(235, 235, 235)")
68 .attr("transform", "translate(0," + size.height + ")")
71 .attr("class", "label")
72 .attr("x", size.width)
74 .attr("fill", "rgb(235, 235, 235)")
75 .style("text-anchor", "end")
80 .attr("class", "y axis")
81 .attr("fill", "#7ADD49")
84 .attr("class", "label")
85 .attr("transform", "rotate(-90)")
87 .attr("fill", "#7ADD49")
89 .style("text-anchor", "end")
94 .attr("class", "y axis")
95 .attr("fill", "#FA4925")
96 .attr("transform", "translate(" + size.width + ", 0)")
99 .attr("class", "label")
100 .attr("transform", "rotate(-90)")
102 .attr("fill", "#FA4925")
104 .style("text-anchor", "end")
108 svg.append("svg:line")
110 .attr("x2", size.width)
111 .attr("y1", yLeft(meanLeft))
112 .attr("y2", yLeft(meanLeft))
113 .attr("class", "left-mean");
116 svg.append("svg:line")
118 .attr("x2", size.width)
119 .attr("y1", yRight(meanRight))
120 .attr("y2", yRight(meanRight))
121 .attr("class", "right-mean");
123 // samplingTimeOffset
125 .attr("x1", x(samplingTimeOffset))
126 .attr("x2", x(samplingTimeOffset))
127 .attr("y1", yLeft(0))
128 .attr("y2", yLeft(yAxisLeft.scale().domain()[1]))
129 .attr("class", "sample-time");
134 .attr("class", "left-samples")
135 .attr("d", lineLeft);
140 .attr("class", "right-samples")
141 .attr("d", lineRight);