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);