Sparkline d3 chart

by aybalasubramanian

HTML

<p>Spark line, like this <span id="spark1"></span>. If you have any questions, we can have a conversation </p>

CSS

#spark1{

}
svg{

}
.sparkline {
  fill: none;
  stroke: #000;
  stroke-width: 1px;
}
.sparkcircle {
  fill: #ff0000;
  stroke: none;
}
.sparkrange{
  fill: #dddddd;
  stroke: none;
}

JavaScript

var width = 100;
var height = 21;
var x = d3.scale.linear().range([0, width - 2]);
var y = d3.scale.linear().range([height - 4, 0]);
var parseDate = d3.time.format("%b %d, %Y").parse;
var line = d3.svg.line()
             .interpolate("basis")
             .x(function(d) { return x(d.date); })
             .y(function(d) { return y(d.close); });

function sparkline(elemId, data, lo, hi) {
  data.forEach(function(d) {
    d.date = parseDate(d.Date);
    d.close = +d.Close;
  });

  x.domain(d3.extent(data, function(d) { return d.date; }));
  y.domain(d3.extent(data, function(d) { return d.close; }));

  var svg = d3.select(elemId)
              .append('svg')
              .attr('width', width)
              .attr('height', height)
              .append('g')
              .attr('transform', 'translate(0, 2)');
    
    if (lo && hi){
          svg.append('rect')   
              .attr('class', 'sparkrange')
              .attr("x", x(data[0].date))
              .attr("y", y(hi))
              .attr("width", x(data[data.length - 1].date) - x(data[0].date))
              .attr("height", y(lo) - y(hi));

    }    
    
    svg.append('path')
     .datum(data)
     .attr('class', 'sparkline')
     .attr('d', line);
  svg.append('circle')
     .attr('class', 'sparkcircle')
     .attr('cx', x(data[data.length - 1].date))
     .attr('cy', y(data[data.length - 1].close))
     .attr('r', 1.5);  
    

}

var data = [
    {"Date": "Nov 1, 2018", "Close": "26"},
    {"Date": "Nov 2, 2018", "Close": "27"},
    {"Date": "Nov 3, 2018", "Close": "29"},
    {"Date": "Nov 4, 2018", "Close": "23"},
    {"Date": "Nov 5, 2018", "Close": "22"},
    {"Date": "Nov 8, 2018", "Close": "24"},
    {"Date": "Nov 9, 2018", "Close": "29"},
    {"Date": "Nov 10, 2018", "Close": "26"},
    {"Date": "Nov 11, 2018", "Close": "25"}
];

sparkline('#spark1', data, 24.3, 25.6);