NVD3 TEST
upside down
by Marei
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/nvd3/1.1.15-beta/nv.d3.min.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/nvd3/1.1.15-beta/nv.d3.min.css">
<div id="chart">
<svg></svg>
</div>
CSS
@import url(http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono);
.nvd3 .nv-axis .nv-axisMaxMin text {
font-weight: 700;
display: none;
}
text.nv-axislabel {font-size: 24px;}
#chart svg {
height: 700px;
width:100%;
}
.nv-label text{
font-family: Droid Sans;
}
JavaScript
d3.json('www.kato-media.de/transfer/data.json', function(data) {
nv.addGraph(function() {
var maxY = d3.max(d3.merge(data.map(function(d){return d.values})), function(d) {return d.rank});
var chart = nv.models.lineChart()
.x(function(d) {return d3.time.format("%Y%m%d").parse(d.date) })
.y(function(d) {return d.rank})
.yDomain([maxY+1,0]) //Inverts y-axis
.color(d3.scale.category10().range())
.useInteractiveGuideline(true)
.margin({left: 100})
.margin({right: 100})
.margin({bottom: 100})
;
chart.options({
noData: "Not enough data to graph",
rightAlignYAxis: false,
});
//Map all xValues for each dataset to an array (tmp) --- To make sure all x-axis ticks have a label
var tmp = data.map(function(e) {
return e.values.map(function(d) {
return d3.time.format('%Y%m%d').parse(d.date);
});
});
//And flatten out that array, so you have all your xValues in a 1D-array
var xValues = [].concat.apply([], tmp);
chart.legend.margin({top: 10, right:60, left:80, bottom: 50});
chart.xAxis
.tickFormat(function(d) {return d3.time.format('%Y-%m-%d')(new Date(d)) })
.rotateLabels(-45)
.tickValues(xValues)
.showMaxMin(false)
;
chart.xScale(d3.time.scale()); //fixes misalignment of timescale with line graph
chart.yAxis
.axisLabel('Rank')
.tickFormat(d3.format('d'))
.showMaxMin(true)
.tickPadding(10);
;
d3.select('#chart svg')
.datum(data)
.transition().duration(500)
.call(chart)
;
nv.utils.windowResize(chart.update);
return chart;
});