Skip to content

Instantly share code, notes, and snippets.

@kpq
Last active December 23, 2015 15:19
Show Gist options
  • Save kpq/6654323 to your computer and use it in GitHub Desktop.
Save kpq/6654323 to your computer and use it in GitHub Desktop.
Axis formatting and styling in D3

A demo of decent-looking axes and axis formatting in D3. SVG also styled to help understand margins.

citycode year month val
ATXR 2000 1 100
ATXR 2000 2 100.8
ATXR 2000 3 101.18
ATXR 2000 4 102.5
ATXR 2000 5 103.38
ATXR 2000 6 104.58
ATXR 2000 7 104.81
ATXR 2000 8 105.09
ATXR 2000 9 105.08
ATXR 2000 10 105.56
ATXR 2000 11 106.04
ATXR 2000 12 106.35
ATXR 2001 1 106.63
ATXR 2001 2 106.9
ATXR 2001 3 107.24
ATXR 2001 4 108.08
ATXR 2001 5 108.74
ATXR 2001 6 109.77
ATXR 2001 7 110.24
ATXR 2001 8 110.71
ATXR 2001 9 111.09
ATXR 2001 10 111.24
ATXR 2001 11 111.17
ATXR 2001 12 111.01
ATXR 2002 1 111.18
ATXR 2002 2 111.67
ATXR 2002 3 112.02
ATXR 2002 4 112.39
ATXR 2002 5 113.01
ATXR 2002 6 113.75
ATXR 2002 7 114.31
ATXR 2002 8 114.68
ATXR 2002 9 114.76
ATXR 2002 10 114.86
ATXR 2002 11 114.91
ATXR 2002 12 114.91
ATXR 2003 1 115.12
ATXR 2003 2 115.23
ATXR 2003 3 115.84
ATXR 2003 4 116.06
ATXR 2003 5 116.88
ATXR 2003 6 117.35
ATXR 2003 7 117.79
ATXR 2003 8 118.17
ATXR 2003 9 118.53
ATXR 2003 10 118.4
ATXR 2003 11 118.45
ATXR 2003 12 118.31
ATXR 2004 1 118.67
ATXR 2004 2 118.65
ATXR 2004 3 119.06
ATXR 2004 4 120.1
ATXR 2004 5 120.88
ATXR 2004 6 121.49
ATXR 2004 7 122.23
ATXR 2004 8 122.86
ATXR 2004 9 123.37
ATXR 2004 10 123.27
ATXR 2004 11 123.27
ATXR 2004 12 123.53
ATXR 2005 1 123.84
ATXR 2005 2 124.21
ATXR 2005 3 124.7
ATXR 2005 4 125.92
ATXR 2005 5 127.12
ATXR 2005 6 128.53
ATXR 2005 7 129.03
ATXR 2005 8 129.51
ATXR 2005 9 129.49
ATXR 2005 10 129.63
ATXR 2005 11 129.83
ATXR 2005 12 130.21
ATXR 2006 1 130.59
ATXR 2006 2 130.61
ATXR 2006 3 130.62
ATXR 2006 4 131.51
ATXR 2006 5 132.72
ATXR 2006 6 134.01
ATXR 2006 7 134.9
ATXR 2006 8 135.27
ATXR 2006 9 135.1
ATXR 2006 10 134.73
ATXR 2006 11 134.18
ATXR 2006 12 134.01
ATXR 2007 1 133.45
ATXR 2007 2 133.3
ATXR 2007 3 133.22
ATXR 2007 4 134.27
ATXR 2007 5 135.03
ATXR 2007 6 136.11
ATXR 2007 7 136.47
ATXR 2007 8 136.44
ATXR 2007 9 135.55
ATXR 2007 10 133.86
ATXR 2007 11 131.34
ATXR 2007 12 129.61
ATXR 2008 1 127.76
ATXR 2008 2 125.98
ATXR 2008 3 124.46
ATXR 2008 4 123.62
ATXR 2008 5 124.29
ATXR 2008 6 124.61
ATXR 2008 7 124.74
ATXR 2008 8 124.32
ATXR 2008 9 122.71
ATXR 2008 10 119.79
ATXR 2008 11 116.46
ATXR 2008 12 113
ATXR 2009 1 109.44
ATXR 2009 2 106.65
ATXR 2009 3 105.07
ATXR 2009 4 105.42
ATXR 2009 5 105.98
ATXR 2009 6 107.62
ATXR 2009 7 110.09
ATXR 2009 8 111.27
ATXR 2009 9 111.26
ATXR 2009 10 110.12
ATXR 2009 11 109.29
ATXR 2009 12 108.62
ATXR 2010 1 107.04
ATXR 2010 2 105.65
ATXR 2010 3 103.73
ATXR 2010 4 105.69
ATXR 2010 5 107.86
ATXR 2010 6 109.72
ATXR 2010 7 110.02
ATXR 2010 8 108.95
ATXR 2010 9 106.39
ATXR 2010 10 103.3
ATXR 2010 11 100.8
ATXR 2010 12 100.06
ATXR 2011 1 100.33
ATXR 2011 2 100.68
ATXR 2011 3 100.33
ATXR 2011 4 101.81
ATXR 2011 5 102.8
ATXR 2011 6 104.32
ATXR 2011 7 104.55
ATXR 2011 8 102.04
ATXR 2011 9 95.99
ATXR 2011 10 91.21
ATXR 2011 11 88.92
ATXR 2011 12 87.3
ATXR 2012 1 85.44
ATXR 2012 2 83.27
ATXR 2012 3 82.54
ATXR 2012 4 84.48
ATXR 2012 5 87.87
ATXR 2012 6 91.75
ATXR 2012 7 94.15
ATXR 2012 8 95.8
ATXR 2012 9 96.06
ATXR 2012 10 95.6
ATXR 2012 11 95.68
ATXR 2012 12 95.95
ATXR 2013 1 96.98
ATXR 2013 2 97.01
ATXR 2013 3 98.29
ATXR 2013 4 102.06
ATXR 2013 5 105.56
ATXR 2013 6 109.15
<style type="text/css">
body {
font-family: arial;
width:800px;
margin:20px auto;
}
svg {
border:1px dashed #ff00ff;
}
.g-city-line {
fill:none;
stroke-width: 2px;
stroke:orange;
}
/* axis CSS */
.axis line {
fill: none;
stroke: #ccc;
stroke-dasharray: 2px 3px;
shape-rendering: crispEdges;
stroke-width: 1px;
}
.axis text {
font-family: arial, sans-serif;
font-size: 12px;
pointer-events: none;
fill: #777;
}
.axis path {
display: none;
}
.y.axis line {
}
.y.axis text {
text-anchor: end !important;
font-size:12px;
}
.g-baseline line {
stroke:#000;
stroke-dasharray:none;
}
</style>
<div class="g-chart">
<h4>Case-Shiller Home Price Index: Atlanta</h4>
</div>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script type="text/javascript">
var margin = {top: 10, right: 40, bottom: 40, left: 10};
var width = 800 - margin.left - margin.right,
height = 400 - margin.top - margin.bottom,
formatYear = d3.time.format("'%y");
var svg = d3.select(".g-chart").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 + ")");
var x = d3.time.scale()
.range([0, width]);
var y = d3.scale.linear()
.range([height, 0]);
var line = d3.svg.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.val); });
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(d3.time.years)
.tickSize(4)
.tickPadding(2)
.tickFormat(formatYear);
var yAxis = d3.svg.axis()
.scale(y)
.orient("right")
.tickSize(-width - margin.left - margin.right)
d3.tsv("atlanta-home-prices.tsv", function(err, data) {
data.forEach(function(d) {
d.val = +d.val;
d.year = +d.year;
d.month = +d.month;
d.date = new Date(+d.year, +d.month -1 , 1 );
});
x.domain(d3.extent(data, function(d) { return d.date; }))
y.domain(d3.extent(data, function(d) { return d.val; }))
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.attr("transform", "translate(" + (width) + ",0)")
.call(yAxis)
.selectAll("g")
.classed("g-baseline", function(d) { return d == 100 })
.selectAll("g text")
.attr("dx", 30);
svg.append("path")
.attr("class", "g-city-line")
.attr("d", line(data) );
});
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment