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;
});