var AreaChart = { margin: {top: 20, right: 0, bottom: 40, left: 80}, init: function(svg, html_tag_attr, dataset, xTimeParse, xAxisFormat, yTicks){ this.html_tag_attr = html_tag_attr; //var div = d3.select(this.html_tag_attr).append("div") d3.select(this.html_tag_attr).append("div") .attr("class", "tooltip") .style("opacity", 0); // set the dimensions and margins of the graph var width = $(this.html_tag_attr).width() - this.margin.left - this.margin.right, height = $(this.html_tag_attr).height() - this.margin.top - this.margin.bottom; // parse the date / time var parseTime = d3.timeParse(xTimeParse); // set the ranges var x = d3.scaleTime().range([0, width]); var y = d3.scaleLinear().range([(height), this.margin.top]); // define the area var area = d3.area() .x(function(d) { return x(d.x); }) .y0(height) .y1(function(d) { return y(+d.y); }); // define the line var valueline = d3.line() .x(function(d) { return x(d.x); }) .y(function(d) { return y(+d.y); }); //.y(function(d) { return y(d.y); }); //var svg = this.svg(html_tag_attr, width, height, this.margin); // format the dataset dataset.forEach(function(d) { d.x = parseTime(d.x); d.y = +d.y; }); // Scale the range of the dataset x.domain(d3.extent(dataset, function(d) { return d.x; })); y.domain([0, d3.max(dataset, function(d) { return +d.y + 10; })]).ticks(2); // set the gradient //svg.append("linearGradient") <== THIS ONE WORKS // .attr("id", "area-gradient") // .attr("gradientUnits", "userSpaceOnUse") // .attr("x1", 0).attr("y1", y(0)) // .attr("x2", 0).attr("y2", y(20000)) // .selectAll("stop") // .data([ // {offset: "40%", color: "#efffef"}, // {offset: "80%", color: "#efffef", opacity:0.8} // ]) // .enter().append("stop") // .attr("offset", function(d) { return d.offset; }) // .attr("stop-color", function(d) { return d.color; }); var max = d3.max(dataset, function(d) { return +d.y + 10; }); svg.append("linearGradient") //<== THIS ONE IS FOR TEST .attr("id", "area-gradient") .attr("gradientUnits", "userSpaceOnUse") .attr("x1", 0).attr("y1", y(0)) .attr("x2", 0).attr("y2", y(max)) //.attr("x3", 0).attr("y3", y(17000)) //.attr("x4", 0).attr("y4", y(18000)) .selectAll("stop") .data([ {offset: "20%", color: "red", opacity:0.5}, {offset: "40%", color: "orange", opacity:0.2}, {offset: "80%", color: "yellow", opacity:0.2}, {offset: "100%", color: "green", opacity:0.5} ]) .enter().append("stop") .attr("offset", function(d) { return d.offset; }) .attr("stop-color", function(d) { return d.color; }); // add the area svg.append("path") .data([dataset]) .attr("class", "area") .attr("d", area); // Add the valueline path. svg.append("path") .data([dataset]) .attr("fill", "none") .attr("class", "line") //.attr("stroke", "green") .attr("stroke-width", "1.5px") .attr("d", valueline); // Add the X Axis svg.append("g") .attr("class", "axis") .attr("transform", "translate(0," + height + ")") .call(d3.axisBottom(x) .tickFormat(d3.timeFormat(xAxisFormat))) .selectAll("text") .attr("dx", "-.8em") .attr("dy", ".95em"); // Add the Y Axis svg.append("g") .attr("class", "axis") .call(d3.axisLeft(y).ticks(yTicks)) .selectAll("text") .style("text-anchor", "end") ; }, //ENDOF init: function() addLine: function(svg, html_tag_attr, dataset, xTimeParse, color){ // set the dimensions and margins of the graph var width = $(this.html_tag_attr).width() - this.margin.left - this.margin.right, height = $(this.html_tag_attr).height() - this.margin.top - this.margin.bottom; // parse the date / time var parseTime = d3.timeParse(xTimeParse); // set the ranges var x = d3.scaleTime().range([0, width]); var y = d3.scaleLinear().range([height, 0]); // define the line var valueline = d3.line() .x(function(d) { return x(d.x); }) .y(function(d) { return y(+d.y); }); //.y(function(d) { return y(d.y); }); //var svg = this.svg(html_tag_attr, width, height, this.margin); // format the dataset dataset.forEach(function(d) { d.x = parseTime(d.x); d.y = +d.y; }); // Scale the range of the dataset x.domain(d3.extent(dataset, function(d) { return d.x; })); y.domain([0, d3.max(dataset, function(d) { return +d.y + 10; })]).ticks(2); // Add the valueline path. svg.append("path") .data([dataset]) .attr("fill", "none") .attr("stroke", color) .attr("stroke-width", "2px") .attr("d", valueline) ; }, //ENDOG addLine: function() }; //ENDOF LineChart