Margin Convention
This example illustrates the margin convention for D3.js v3, visualizing the layout of an SVG chart with outer and inner padding rectangles. Dashed and solid outlines mark the chart area while arrows label the origin and padding offsets. The code defines margin and padding objects, then uses `d3.svg.axis()` to position bottom and right axes on translated `g` elements. SVG markers create arrowheads for dimension annotations, and `d3.scale.identity` maps pixel coordinates, demonstrating how margins simplify chart construction by separating layout concerns from scale ranges.
AI-generated descriptionFirst define the margin object with properties for the four sides (clockwise from the top, as in CSS).
var margin = {top: 20, right: 10, bottom: 20, left: 10};
Then define width and height as the inner dimensions of the chart area.
var width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
Lastly, define svg as a G element that translates the origin to the top-left corner of the chart area.
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
With this convention, all subsequent code can ignore margins. For example, to create x and y scales, simply say:
var x = d3.scale.linear()
.range([0, width]);
var y = d3.scale.linear()
.range([height, 0]);
If you want to add axes to the chart, they will be positioned correctly by default in the "left" and "top" orientations. For "right" or "bottom" orientation, translate the axis G element by the width or height, respectively.