Binary (up/down) sparkline in D3
Simple but cool
{"edges":[{"name":"Bob","top":"1","mine":"1"},{"name":"Ben ","top":"1","mine":"0"},{"name":"Ben ","top":"1","mine":"0"},{"name":"Ben ","top":"1","mine":"0"},{"name":"Sally","top":"0","mine":"0"},{"name":"Johnathon","top":"1","mine":"1"},{"name":"Bob","top":"0","mine":"1"},{"name":"Sally","top":"1","mine":"0"},{"name":"Bob","top":"1","mine":"1"},{"name":"Ben ","top":"1","mine":"0"},{"name":"Eric ","top":"1","mine":"0"},{"name":"Sally","top":"0","mine":"0"},{"name":"Ben ","top":"0","mine":"0"},{"name":"Bob ","top":"0","mine":"1"},{"name":"Susan","top":"1","mine":"0"}]} |
<!DOCTYPE html> | |
<html> | |
<script src="http://d3js.org/d3.v3.min.js"></script> | |
<head> | |
<title>D3 Sparkline</title> | |
</head> | |
<style> | |
body { | |
font-family:"Lucida Grande","Droid Sans",Arial,Helvetica,sans-serif; | |
} | |
.legendwrap { | |
width: 300px; | |
} | |
.bld { | |
font-weight: bold; | |
} | |
.mine { | |
background-color: #9ACC73; | |
fill: #9ACC73; | |
} | |
.yours { | |
background-color: #4D7FBF; | |
fill: #4D7FBF; | |
} | |
.rsp { | |
stroke: #FF0000; | |
stroke-width: 0.5px; | |
} | |
.oversvg { | |
padding: 50px; | |
} | |
</style> | |
<body> | |
</body> | |
<script> | |
d3.json("data.json", function(error, json) { | |
var h = 75; | |
var t = json.edges.length; | |
var w = 300; | |
// dymanically calculate width, shrinks ticks to fit the size | |
var sw = Math.min(w/t, 25); | |
var svg = d3.select("body") | |
.append("svg:svg") | |
.attr("height", h) | |
.attr("width", w) | |
.attr("class", "oversvg"); | |
var node = svg.selectAll("g.tick") | |
.data(json.edges) | |
.enter().append("svg:g") | |
.attr("class", "tick"); | |
node.append("svg:rect") | |
.attr("class", function(d) { | |
var retval = ''; | |
d['mine'] == 1 ? retval += "mine": retval += "yours"; | |
d['resp'] == 1 ? d['mine'] == 0 ? retval += " rsp" : '' : ''; | |
return retval; | |
}) | |
.attr("x", function(d, i) { | |
return i * sw + 1; | |
}) | |
.attr("y", function(d) { | |
return d['top']==1?0:h/2; | |
}) | |
.attr("height", h/2-1) | |
.attr("width", function(d) { | |
return sw - 1.5; | |
}); | |
node.append("svg:title") | |
.text(function (d) { | |
return d['name']; | |
}); | |
}); | |
</script> | |
</html> |