Skip to content

Instantly share code, notes, and snippets.

@aberezin
Created August 1, 2014 16:23
Show Gist options
  • Save aberezin/746ddea47be79a964b96 to your computer and use it in GitHub Desktop.
Save aberezin/746ddea47be79a964b96 to your computer and use it in GitHub Desktop.
NVD3 line graph with problematic xaxis ticks
<!DOCTYPE html>
<meta charset="utf-8">
<link href="http://cdnjs.cloudflare.com/ajax/libs/nvd3/1.1.15-beta/nv.d3.min.css" rel="stylesheet" type="text/css">
<style>
body {
overflow-y:scroll;
}
text {
font: 12px sans-serif;
}
svg {
display: block;
}
#chart1 svg {
height: 200px;
min-width: 100px;
min-height: 100px;
/*
margin: 50px;
Minimum height and width is a good idea to prevent negative SVG dimensions...
For example width should be =< margin.left + margin.right + 1,
of course 1 pixel for the entire chart would not be very useful, BUT should not have errors
*/
}
#chart1 {
margin-top: 5px;
margin-left: 5px;
}
</style>
<body class='with-3d-shadow with-transitions'>
<div id="chart1" >
<svg style="height: 200px;"></svg>
</div>
<script src="http://cdnjs.cloudflare.com/ajax/libs/d3/3.4.9/d3.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/nvd3/1.1.15-beta/nv.d3.min.js"></script>
<script src="src/tooltip.js"></script>
<script src="src/utils.js"></script>
<script src="src/interactiveLayer.js"></script>
<script src="src/models/legend.js"></script>
<script src="src/models/axis.js"></script>
<script src="src/models/scatter.js"></script>
<script src="src/models/line.js"></script>
<script src="src/models/lineChart.js"></script>
<script>
//using d3-3.4.9 instead of 3.1.5 because it seems to avoid the CORS preflight. But if it causes problems, we can go back to 3.1.5
//at the cost of one OPTIONS request
// Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs, and may do more in the future... it's NOT required
var chart;
var rigCountJson;
var reqStr = 'http://localhost:8000/rigsMarToAug2014.json';
d3.json(reqStr)
.get( function(error, rcdata) {
if(error) console.warn(error);
console.log(rcdata);
var rigSeries = rigCountSeries(rcdata);
nv.addGraph(function() {
chart = nv.models.lineChart()
.options({
margin: {top: 20, left: 50, bottom: 60, right: 10},
// x: function(d,i) { return i},
showXAxis: true,
showYAxis: true,
transitionDuration: 250
})
.forceY(1500,2200)
;
var fmt=d3.time.format('%m/%d/%Y');
//having a hard time getting xticks correct.
//var xTickRange = d3.time.week.range(rigSeries[0].startDate, rigSeries[0].endDate, 1);
//lets try explicitly constructing array of Date. One Date every 7 days starting with the first date we see in the incoming data
var xTickRange = [];
z=rigSeries[0].values;
nMax = z.length;
for(i=0; i<nMax; i++) {
var dtick=new Date(z[i].x);
xTickRange.push(dtick);
i+=7;
// console.log(dtick);
}
chart.xAxis
.axisLabel("Date")
.tickFormat(function(d){return fmt(new Date(+d))} )
.rotateLabels(-45)
.tickValues(xTickRange)
//this didnt work. Function isnt even called
// .scale().ticks( function(start,end) {
// consol.log(start,",",end);
// var mid = new Date((start.getTime() + end.getTime()) / 2);
// return [start,mid,end];
// })
;
chart.yAxis
.axisLabel('Rig Count')
.tickFormat(d3.format(',d'))
;
d3.select('#chart1 svg')
.datum(rigSeries)
.call(chart);
//TODO: Figure out a good way to do this automatically
nv.utils.windowResize(chart.update);
//nv.utils.windowResize(function() { d3.select('#chart1 svg').call(chart) });
chart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });
return chart;
});
});
function rigCountSeries(rigCountJson) {
var timeseries = [];
var fmt = d3.time.format("%Y%m%d");
for (var i in rigCountJson) {
var v=rigCountJson[i];
timeseries.push({x: +fmt.parse(v.date), y: v.count}); //add x vals as millis, not Date
var d = +fmt.parse(v.date)
//console.log("d["+i+"]:" + new Date(d) + ", v:"+v.date) ;
}
return [
{
// area: true,
values: timeseries,
key: "Rig Count",
color: "#ff7f0e",
startDate: new Date(timeseries[0].x),
endDate: new Date(timeseries[timeseries.length-1].x)
}
];
}
</script>
[{"date":"20140301","count":1778,"change_week":-21,"change_month":-4,"change_year":0}, {"date":"20140302","count":1778,"change_week":-21,"change_month":-4,"change_year":0}, {"date":"20140303","count":1771,"change_week":-41,"change_month":-9,"change_year":0}, {"date":"20140304","count":1775,"change_week":-34,"change_month":27,"change_year":0}, {"date":"20140305","count":1783,"change_week":-28,"change_month":33,"change_year":0}, {"date":"20140306","count":1789,"change_week":-20,"change_month":32,"change_year":0}, {"date":"20140307","count":1791,"change_week":13,"change_month":29,"change_year":0}, {"date":"20140308","count":1791,"change_week":13,"change_month":29,"change_year":0}, {"date":"20140309","count":1791,"change_week":13,"change_month":29,"change_year":0}, {"date":"20140310","count":1805,"change_week":34,"change_month":41,"change_year":0}, {"date":"20140311","count":1797,"change_week":22,"change_month":26,"change_year":0}, {"date":"20140312","count":1803,"change_week":20,"change_month":24,"change_year":0}, {"date":"20140313","count":1814,"change_week":25,"change_month":31,"change_year":0}, {"date":"20140314","count":1809,"change_week":18,"change_month":25,"change_year":0}, {"date":"20140315","count":1809,"change_week":18,"change_month":25,"change_year":0}, {"date":"20140316","count":1809,"change_week":18,"change_month":25,"change_year":0}, {"date":"20140317","count":1828,"change_week":23,"change_month":51,"change_year":0}, {"date":"20140318","count":1831,"change_week":34,"change_month":57,"change_year":0}, {"date":"20140319","count":1826,"change_week":23,"change_month":44,"change_year":0}, {"date":"20140320","count":1821,"change_week":7,"change_month":23,"change_year":0}, {"date":"20140321","count":1828,"change_week":19,"change_month":29,"change_year":0}, {"date":"20140322","count":1828,"change_week":19,"change_month":29,"change_year":0}, {"date":"20140323","count":1828,"change_week":19,"change_month":29,"change_year":0}, {"date":"20140324","count":1815,"change_week":-13,"change_month":3,"change_year":0}, {"date":"20140325","count":1815,"change_week":-16,"change_month":6,"change_year":0}, {"date":"20140326","count":1816,"change_week":-10,"change_month":5,"change_year":0}, {"date":"20140327","count":1815,"change_week":-6,"change_month":6,"change_year":0}, {"date":"20140328","count":1817,"change_week":-11,"change_month":39,"change_year":0}, {"date":"20140329","count":1817,"change_week":-11,"change_month":39,"change_year":0}, {"date":"20140330","count":1817,"change_week":-11,"change_month":39,"change_year":0}, {"date":"20140331","count":1817,"change_week":2,"change_month":39,"change_year":0}, {"date":"20140401","count":1806,"change_week":-9,"change_month":28,"change_year":0}, {"date":"20140402","count":1815,"change_week":-1,"change_month":37,"change_year":0}, {"date":"20140403","count":1828,"change_week":13,"change_month":57,"change_year":0}, {"date":"20140404","count":1827,"change_week":10,"change_month":52,"change_year":0}, {"date":"20140405","count":1827,"change_week":10,"change_month":44,"change_year":0}, {"date":"20140406","count":1827,"change_week":10,"change_month":38,"change_year":0}, {"date":"20140407","count":1818,"change_week":1,"change_month":27,"change_year":0}, {"date":"20140408","count":1816,"change_week":10,"change_month":25,"change_year":0}, {"date":"20140409","count":1827,"change_week":12,"change_month":36,"change_year":0}, {"date":"20140410","count":1832,"change_week":4,"change_month":27,"change_year":0}, {"date":"20140411","count":1850,"change_week":23,"change_month":53,"change_year":0}, {"date":"20140412","count":1850,"change_week":23,"change_month":47,"change_year":0}, {"date":"20140413","count":1850,"change_week":23,"change_month":36,"change_year":0}, {"date":"20140414","count":1861,"change_week":43,"change_month":52,"change_year":0}, {"date":"20140415","count":1848,"change_week":32,"change_month":39,"change_year":0}, {"date":"20140416","count":1849,"change_week":22,"change_month":40,"change_year":0}, {"date":"20140417","count":1854,"change_week":22,"change_month":26,"change_year":0}, {"date":"20140418","count":1854,"change_week":4,"change_month":23,"change_year":0}, {"date":"20140419","count":1854,"change_week":4,"change_month":28,"change_year":0}, {"date":"20140420","count":1854,"change_week":4,"change_month":33,"change_year":0}, {"date":"20140421","count":1845,"change_week":-16,"change_month":17,"change_year":0}, {"date":"20140422","count":1860,"change_week":12,"change_month":32,"change_year":0}, {"date":"20140423","count":1871,"change_week":22,"change_month":43,"change_year":0}, {"date":"20140424","count":1863,"change_week":9,"change_month":48,"change_year":0}, {"date":"20140425","count":1860,"change_week":6,"change_month":45,"change_year":0}, {"date":"20140426","count":1860,"change_week":6,"change_month":44,"change_year":0}, {"date":"20140427","count":1860,"change_week":6,"change_month":45,"change_year":0}, {"date":"20140428","count":1852,"change_week":7,"change_month":35,"change_year":0}, {"date":"20140429","count":1842,"change_week":-18,"change_month":25,"change_year":0}, {"date":"20140430","count":1849,"change_week":-22,"change_month":32,"change_year":0}, {"date":"20140501","count":1862,"change_week":-1,"change_month":56,"change_year":0}, {"date":"20140502","count":1849,"change_week":-11,"change_month":34,"change_year":0}, {"date":"20140503","count":1849,"change_week":-11,"change_month":21,"change_year":0}, {"date":"20140504","count":1849,"change_week":-11,"change_month":22,"change_year":0}, {"date":"20140505","count":1861,"change_week":9,"change_month":34,"change_year":0}, {"date":"20140506","count":1863,"change_week":21,"change_month":36,"change_year":0}, {"date":"20140507","count":1868,"change_week":19,"change_month":50,"change_year":0}, {"date":"20140508","count":1871,"change_week":9,"change_month":55,"change_year":0}, {"date":"20140509","count":1875,"change_week":26,"change_month":48,"change_year":0}, {"date":"20140510","count":1875,"change_week":26,"change_month":43,"change_year":0}, {"date":"20140511","count":1875,"change_week":26,"change_month":25,"change_year":0}, {"date":"20140512","count":1881,"change_week":20,"change_month":31,"change_year":0}, {"date":"20140513","count":1880,"change_week":17,"change_month":30,"change_year":480}, {"date":"20140514","count":1865,"change_week":-3,"change_month":4,"change_year":464}, {"date":"20140515","count":1871,"change_week":0,"change_month":23,"change_year":479}, {"date":"20140516","count":1901,"change_week":26,"change_month":52,"change_year":499}, {"date":"20140517","count":1901,"change_week":26,"change_month":47,"change_year":496}, {"date":"20140518","count":1901,"change_week":26,"change_month":47,"change_year":496}, {"date":"20140519","count":1905,"change_week":24,"change_month":51,"change_year":500}, {"date":"20140520","count":1902,"change_week":22,"change_month":48,"change_year":496}, {"date":"20140521","count":1914,"change_week":49,"change_month":69,"change_year":498}, {"date":"20140522","count":1912,"change_week":41,"change_month":52,"change_year":493}, {"date":"20140523","count":1913,"change_week":12,"change_month":42,"change_year":499}, {"date":"20140524","count":1913,"change_week":12,"change_month":50,"change_year":505}, {"date":"20140525","count":1913,"change_week":12,"change_month":53,"change_year":505}, {"date":"20140526","count":1913,"change_week":8,"change_month":53,"change_year":505}, {"date":"20140527","count":1932,"change_week":30,"change_month":72,"change_year":524}, {"date":"20140528","count":1932,"change_week":18,"change_month":80,"change_year":529}, {"date":"20140529","count":1922,"change_week":10,"change_month":80,"change_year":524}, {"date":"20140530","count":1920,"change_week":7,"change_month":71,"change_year":518}, {"date":"20140531","count":1920,"change_week":7,"change_month":71,"change_year":523}, {"date":"20140601","count":1920,"change_week":7,"change_month":58,"change_year":523}, {"date":"20140602","count":1948,"change_week":35,"change_month":99,"change_year":551}, {"date":"20140603","count":1945,"change_week":13,"change_month":96,"change_year":548}, {"date":"20140604","count":1953,"change_week":21,"change_month":104,"change_year":562}, {"date":"20140605","count":1962,"change_week":40,"change_month":101,"change_year":562}, {"date":"20140606","count":1963,"change_week":43,"change_month":100,"change_year":569}, {"date":"20140607","count":1963,"change_week":43,"change_month":95,"change_year":546}, {"date":"20140608","count":1963,"change_week":43,"change_month":92,"change_year":546}, {"date":"20140609","count":1979,"change_week":31,"change_month":104,"change_year":562}, {"date":"20140610","count":1985,"change_week":40,"change_month":110,"change_year":531}, {"date":"20140611","count":1989,"change_week":36,"change_month":114,"change_year":512}, {"date":"20140612","count":2001,"change_week":39,"change_month":120,"change_year":522}, {"date":"20140613","count":2006,"change_week":43,"change_month":126,"change_year":523}, {"date":"20140614","count":2006,"change_week":43,"change_month":141,"change_year":521}, {"date":"20140615","count":2006,"change_week":43,"change_month":135,"change_year":531}, {"date":"20140616","count":2001,"change_week":22,"change_month":100,"change_year":526}, {"date":"20140617","count":2008,"change_week":23,"change_month":107,"change_year":533}, {"date":"20140618","count":2006,"change_week":17,"change_month":105,"change_year":525}, {"date":"20140619","count":2002,"change_week":1,"change_month":97,"change_year":524}, {"date":"20140620","count":2005,"change_week":-1,"change_month":103,"change_year":544}, {"date":"20140621","count":2005,"change_week":-1,"change_month":91,"change_year":525}, {"date":"20140622","count":2005,"change_week":-1,"change_month":93,"change_year":525}, {"date":"20140623","count":2011,"change_week":10,"change_month":98,"change_year":531}, {"date":"20140624","count":2014,"change_week":6,"change_month":101,"change_year":540}, {"date":"20140625","count":2016,"change_week":10,"change_month":103,"change_year":522}, {"date":"20140626","count":2012,"change_week":10,"change_month":99,"change_year":517}, {"date":"20140627","count":2013,"change_week":8,"change_month":81,"change_year":516}, {"date":"20140628","count":2013,"change_week":8,"change_month":81,"change_year":521}, {"date":"20140629","count":2013,"change_week":8,"change_month":91,"change_year":521}, {"date":"20140630","count":2008,"change_week":-3,"change_month":88,"change_year":516}, {"date":"20140701","count":1999,"change_week":-15,"change_month":79,"change_year":485}, {"date":"20140702","count":2001,"change_week":-15,"change_month":53,"change_year":481}, {"date":"20140703","count":1992,"change_week":-20,"change_month":47,"change_year":473}, {"date":"20140704","count":2003,"change_week":-10,"change_month":50,"change_year":484}, {"date":"20140705","count":2003,"change_week":-10,"change_month":41,"change_year":484}, {"date":"20140706","count":2003,"change_week":-10,"change_month":40,"change_year":484}, {"date":"20140707","count":2003,"change_week":-5,"change_month":40,"change_year":484}, {"date":"20140708","count":1991,"change_week":-8,"change_month":28,"change_year":476}, {"date":"20140709","count":1993,"change_week":-8,"change_month":14,"change_year":473}, {"date":"20140710","count":2000,"change_week":8,"change_month":15,"change_year":473}, {"date":"20140711","count":2006,"change_week":3,"change_month":17,"change_year":472}, {"date":"20140712","count":2006,"change_week":3,"change_month":5,"change_year":466}, {"date":"20140713","count":2006,"change_week":3,"change_month":0,"change_year":466}, {"date":"20140714","count":2013,"change_week":10,"change_month":7,"change_year":473}, {"date":"20140715","count":2012,"change_week":21,"change_month":6,"change_year":484}, {"date":"20140716","count":2014,"change_week":21,"change_month":13,"change_year":484}, {"date":"20140717","count":2022,"change_week":22,"change_month":14,"change_year":484}, {"date":"20140718","count":2022,"change_week":16,"change_month":16,"change_year":476}, {"date":"20140719","count":2022,"change_week":16,"change_month":20,"change_year":479}, {"date":"20140720","count":2022,"change_week":16,"change_month":17,"change_year":479}, {"date":"20140721","count":2026,"change_week":13,"change_month":21,"change_year":483}, {"date":"20140722","count":2029,"change_week":17,"change_month":24,"change_year":495}, {"date":"20140723","count":2031,"change_week":17,"change_month":20,"change_year":494}, {"date":"20140724","count":2032,"change_week":10,"change_month":18,"change_year":490}, {"date":"20140725","count":2039,"change_week":17,"change_month":23,"change_year":502}, {"date":"20140726","count":2039,"change_week":17,"change_month":27,"change_year":496}, {"date":"20140727","count":2039,"change_week":17,"change_month":26,"change_year":496}, {"date":"20140728","count":2024,"change_week":-2,"change_month":11,"change_year":481}, {"date":"20140729","count":2028,"change_week":-1,"change_month":15,"change_year":502}, {"date":"20140730","count":2022,"change_week":-9,"change_month":14,"change_year":507}, {"date":"20140731","count":2017,"change_week":-15,"change_month":9,"change_year":490}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment