Snippets and conventions for starting a new d3 project without a fuss. Includes d3, lodash, d3-jetpack, some handy css and a few convenience functions.
Instead of making an empty selection, binding data to it, taking the enter selection and appending elements as separate steps:
var circles = svg.selectAll('circle')
.data(data)
.enter()
.append('circle')
Use dataAppend
:
var circles = svg.dataAppend('circle', data)
Attaches a light weight tooltip that prints out all of an objects properties on mouseover. No more > d3.select($0).datum()
! Assumes that a <div class='tooltip'></div>
and the tooltip css exist on the page - see index for an example.
circles.call(d3.attachTooltip)
For formated tooltips, update the html of the tooltip on mouseover:
circles
.call(d3.attachTooltip)
.on('mouseover', function(d){
d3.select('.tooltip').html(template(d)) })
If your fancy tooltip requires lots of markup, using a template might be eaiser than building a complex html tree with d3.
d3.conventions()
appends an svg
element with a g
element according to the margin convention to the page and returns an object with the following properties:
width
, height
, margin
: size of the svg
and its margins
parentSel
: d3.selection
of the element the svg
was appended to. Defaults to d3.select("body")
, but like every other returned value, can be specified by passing in an object: d3.conventions({parentSel: d3.select("#graph-container"), height: 1300})
appends an svg to #graph-container
with a height of 1300.
svg
: g
element translated to make room for the margins
x
: Linear scale with a range of [0, width]
y
: Linear scale with a range of [height, 0]
xAxis
: Axis with scale set to x and orient to “bottom”
yAxis
: Axis with scale set to y and orient to “left”
drawAxis
: Call to append axis group elements to the svg after configuring the domain. Not configurable.