1 // ******************************************
2 // Trend line for reporting
3 // based on scenario_history.txt
4 // where data looks like
5 // date,scenario,installer,detail,score
6 // 2016-09-22 13:12,os-nosdn-fdio-noha,apex,4/12,33.0
7 // 2016-09-22 13:13,os-odl_l2-fdio-noha,apex,12/15,80.0
8 // 2016-09-22 13:13,os-odl_l2-sfc-noha,apex,18/24,75.0
10 // ******************************************
11 // Set the dimensions of the canvas / graph
12 var trend_margin = {top: 20, right: 30, bottom: 50, left: 40},
13 trend_width = 300 - trend_margin.left - trend_margin.right,
14 trend_height = 130 - trend_margin.top - trend_margin.bottom;
16 // Parse the date / time
17 var parseDate = d3.time.format("%Y-%m-%d %H:%M").parse;
20 var trend_x = d3.time.scale().range([0, trend_width]);
21 var trend_y = d3.scale.linear().range([trend_height, 0]);
24 var trend_xAxis = d3.svg.axis().scale(trend_x)
25 .orient("bottom").ticks(2).tickFormat(d3.time.format("%m-%d"));
27 var trend_yAxis = d3.svg.axis().scale(trend_y)
28 .orient("left").ticks(4, "s");
31 var valueline = d3.svg.line()
32 .x(function(d) { return trend_x(d.date); })
33 .y(function(d) { return trend_y(d.score); });
35 var trend = function(container, trend_data) {
37 var trend_svg = d3.select(container)
39 .attr("width", trend_width + trend_margin.left + trend_margin.right)
40 .attr("height", trend_height + trend_margin.top + trend_margin.bottom)
41 .attr("style", "font-size: small")
44 "translate(" + trend_margin.left + "," + trend_margin.top + ")");
46 // Scale the range of the data
47 trend_x.domain(d3.extent(trend_data, function(d) { return d.date; }));
48 trend_y.domain([0, d3.max(trend_data, function(d) { return d.score; })]);
52 .attr("class", "x axis")
53 .attr("transform", "translate(0," + trend_height + ")")
58 .attr("class", "y axis")
61 // Add the valueline path.
62 trend_svg.append("path")
63 .attr("class", "line")
64 .attr("d", valueline(trend_data))
65 .attr("stroke", "steelblue")
66 .attr("fill", "none");
68 trend_svg.selectAll(".dot")
70 .enter().append("circle")
72 .attr("cx", function(d) { return trend_x(d.date); })
73 .attr("cy", function(d) { return trend_y(d.score); });