d3js

by Moon Choi

HTML

<script src="https://d3js.org/d3.v4.min.js"></script>
<svg width="430" height="250">
</svg>

CSS

<style> .axis--x path {
  display: none;
}

.line {
  fill: none;
  stroke: steelblue;
  stroke-width: 1.5px;
}

</style>

JavaScript

var data =
		  '{"recordsFiltered":5,"raCounts":[{"name":"comp_name","values":[{"date_":"2016","actual":170.0,"DT_RowId":"row_null"},{"date_":"2015","actual":198.0,"DT_RowId":"row_null"},{"date_":"2015","actual":149.0,"DT_RowId":"row_null"},{"date_":"2014","actual":197.0,"DT_RowId":"row_null"},{"date_":"2014","actual":146.0,"DT_RowId":"row_null"}],"DT_RowId":"row_null"}],"draw":null,"recordsTotal":5}';

		data = JSON.parse(data).raCounts;


		//svg
		var svg = d3.select("svg"),
		  margin = {
		    top: 100,
		    right: 80,
		    bottom: 30,
		    left: 50
		  },
		  width = svg.attr("width") - margin.left - margin.right,
		  height = svg.attr("height") - margin.top - margin.bottom,
		  g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");


		//time
		var parseTime = d3.timeParse("%Y%m%d");

		//domain
		//				var x = d3.scaleTime().range([0, width]),
		var x = d3.scaleLinear().range([0, width]),
		  y = d3.scaleLinear().range([height, 0]),
		  z = d3.scaleOrdinal(d3.schemeCategory10);

		//line
		var line = d3.line()
		  .curve(d3.curveBasis)
		  .x(function(d) {
		    return x(d.date_);
		  })
		  .y(function(d) {
		    return y(d.actual);
		  });

		//domain
		x.domain(d3.extent(data[0].values, function(d) {
		  return d.date_;
		}));

		y.domain([
		  d3.min(data, function(c) {
		    return d3.min(c.values, function(d) {
		      return d.actual;
		    });
		  }),
		  d3.max(data, function(c) {
		    return d3.max(c.values, function(d) {
		      return d.actual;
		    });
		  })
		]);

		z.domain(data.map(function(c) {
		  return c.DT_RowId;
		}));

		//axis
		g.append("g")
		  .attr("class", "axis axis--x")
		  .attr("transform", "translate(0," + height + ")")
		  .call(d3.axisBottom(x));

		g.append("g")
		  .attr("class", "axis axis--y")
		  .call(d3.axisLeft(y))
		  .append("text")
		  .attr("transform", "rotate(-90)")
		  .attr("y", 6)
		  .attr("dy", "0.71em")
		  .attr("fill", "#000")
		  .text("count");

		var ra...