123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- function meCoffeeGraph () {
- this.n = 243;
- this.data = d3.range(this.n).map(function() { return 18; });
- this.data2 = d3.range(this.n).map(function() { return 18; });
- this.data_sp = d3.range(this.n).map(function() { return 18; });
- }
- // superclass method
- meCoffeeGraph.prototype.draw = function( ) {
- this.duration = 750;
- this.now = new Date(Date.now() - this.duration);
- var
- count = 0;
- var margin = {top: 6, right: 0, bottom: 20, left: 30};
- var rect = $('#graph').parent()[0].getBoundingClientRect();
- this.width = rect.width - margin.right - margin.left;
- this.height = rect.height - margin.top - margin.bottom;
- this.x = d3.time.scale()
- .domain([this.now - (this.n - 2) * this.duration, this.now - this.duration])
- .range([0, this.width]);
- this.y = d3.scale.linear()
- .range([this.height, 0]);
- this.line = d3.svg.line()
- .interpolate("basis")
- .y(function(d, i) { return thiss.y(d); })
- .x(function(d, i) { return thiss.x(thiss.now - (thiss.n - 1 - i) * thiss.duration); });
- //.x(function(d, i) { return this.y(i); });
-
- this.line_tmp2 = d3.svg.line()
- .interpolate("basis")
- .y(function(d, i) { return thiss.y(d); })
- .x(function(d, i) { return thiss.x(thiss.now - (thiss.n - 1 - i) * thiss.duration); });
- //.x(function(d, i) { return this.y(i); });
- this.line2 = d3.svg.line()
- .interpolate("basis")
- .x(function(d, i) { return thiss.x(thiss.now - (thiss.n - 1 - i) * thiss.duration); })
- .y(function(d, i) { return thiss.y(d); });
- $('#graph svg').remove( );
- this.svg = d3.select("#graph").append("svg")
- .attr( "class", "svg-content" )
- .attr( "viewBox", "0 0 " + rect.width + " " + rect.height )
- .attr( "preserveAspectRatio", "none" )
- .attr("id", "svg-g")
- //.attr("width", width + margin.left + margin.right)
- //.attr("height", height + margin.top + margin.bottom)
- //.style("margin-left", -margin.left + "px")
- .append("g")
- .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
- this.svg.append("defs").append("clipPath")
- .attr("id", "clip")
- .append("rect")
- .attr("width", this.width)
- .attr("height", this.height);
- this.axis = this.svg.append("g")
- .attr("class", "x axis")
- .attr("transform", "translate(0," + this.height + ")")
- .call( this.x.axis = d3.svg.axis().scale(this.x).orient("bottom"));
- this.yaxis = this.svg.append("g")
- .attr("class", "y axis")
- .call( this.y.axis = d3.svg.axis().scale(this.y).ticks( 5 ).orient("left"));
- this.path = this.svg.append("g")
- .attr("clip-path", "url(#clip)")
- .style("stroke", "blue")
- .append("path")
- .datum(this.data)
- .attr("id", "line_tmp");
- this.path = this.svg.append("g")
- .attr("clip-path", "url(#clip)")
- .style("stroke", "red")
- .append("path")
- .datum(this.data2)
- .attr("id", "line_tmp2");
- this.path_sp = this.svg.append("g")
- .attr("clip-path", "url(#clip)")
- .style("stroke", "green")
- .append("path")
- .datum(this.data_sp)
- .attr("id", "line_sp");
- this.transition = d3.select({}).transition()
- .duration(100)
- .ease("linear");
- }
- meCoffeeGraph.prototype.tick = function( tmp, tmp2, sp, timestamp ) {
- thiss = this
- if( !this.started )
- this.started = new Date();
- //thiss.transition = thiss.transition.each(function() {
- // update the domains
- if( timestamp )
- thiss.now = new Date( this.started.getTime() + timestamp * 1000 );
- else
- thiss.now = new Date();
- thiss.x.domain([thiss.now - (thiss.n - 2) * thiss.duration, thiss.now - thiss.duration]);
-
- var data2_min = d3.min(thiss.data2),
- data2_max = d3.max(thiss.data2),
- data_min = d3.min(thiss.data),
- data_max = d3.max(thiss.data);
- if( data2_min > 5 && data2_max < 190 ) {
- data_min = Math.min( data2_min, data_min );
- data_max = Math.max( data2_max, data_max );
- }
- thiss.y.domain( [ data_min * 0.90, data_max * 1.1 ] );
- // push the accumulated count onto the back, and reset the count
- thiss.data.push( tmp );
- thiss.data2.push( tmp2 );
- thiss.data_sp.push( sp );
- count = 0;
- // redraw the line
- //thiss = this
- thiss.svg.select("#line_tmp")
- .attr("d", thiss.line )
- .attr("transform", null);
- thiss.svg.select("#line_tmp2")
- .attr("d", thiss.line_tmp2 )
- .attr("transform", null);
- thiss.svg.select("#line_sp")
- .attr("d", thiss.line2 )
- .attr("transform", null);
- // slide the x-axis left
- thiss.axis.call( thiss.x.axis);
- thiss.yaxis.call( thiss.y.axis);
- // slide the line left
- thiss.path.transition()
- .attr("transform", "translate(" + thiss.x(thiss.now - (thiss.n - 1) * thiss.duration) + ")");
- thiss.path_sp.transition()
- .attr("transform", "translate(" + thiss.x(thiss.now - (thiss.n - 1) * thiss.duration) + ")");
- // pop the old data point off the front
- thiss.data.shift();
- thiss.data2.shift();
- thiss.data_sp.shift();
- //}).transition(); //.each("start", tick);
- }
- meCoffeeGraph.prototype.redraw = function() {
- thiss = this;
- thiss.svg.select("#line_tmp")
- .attr("d", thiss.line )
- .attr("transform", null);
- thiss.svg.select("#line_sp")
- .attr("d", thiss.line2 )
- .attr("transform", null);
- }
|