2016-05-18 142 views
0

我是nvd3和d3 js.的新手。我正在使用nvd3创建折线图。现在我想旋转折线图的x轴的文本标签。如何实现这一点? 我尝试使用如何旋转nvd3.js折线图的x轴的文本标签

var xTicks = d3.selectAll('g.tick'); 
    xTicks 
    .selectAll('text') 
    .attr('transform', function(d,i,j) { return ' rotate(-90 0,0)' }) ; 

但没有成功

我当前的代码是

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <link href="../build/nv.d3.css" rel="stylesheet" type="text/css"> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.2/d3.min.js" charset="utf-8"></script> 
    <script src="../build/nv.d3.js"></script> 

    <style> 
     text { 
      font: 12px sans-serif; 
     } 
     svg { 
      display: block; 
     } 
     html, body, #chart1, svg { 
      margin: 0px; 
      padding: 0px; 
      height: 100%; 
      width: 100%; 
     } 

     .dashed { 
      stroke-dasharray: 5,5; 
     } 
    </style> 
    <script type="text/javascript"> 

    function download() 
    { 


img = new Image(), 
     serializer = new XMLSerializer(), 
     svgStr = serializer.serializeToString(document.getElementById('svg')); 

    img.src = 'data:image/svg+xml;base64,'+window.btoa(svgStr); 

    // You could also use the actual string without base64 encoding it: 
    //img.src = "data:image/svg+xml;utf8," + svgStr; 

    var canvas = document.createElement("canvas"); 

    var w=3000; 
    var h=3000; 

    canvas.width = w; 
    canvas.height = h; 
    canvas.getContext("2d").drawImage(img,0,0,w,h); 

    var imgURL = canvas.toDataURL("image/png"); 


var dlLink = document.createElement('a'); 
    dlLink.download = "image"; 
    dlLink.href = imgURL; 
    dlLink.dataset.downloadurl = ["image/png", dlLink.download, dlLink.href].join(':'); 

    document.body.appendChild(dlLink); 
    dlLink.click(); 
    document.body.removeChild(dlLink); 
    } 

    </script> 
</head> 
<body class='with-3d-shadow with-transitions'> 
<div style="position:absolute; top: 0; left: 0;"> 
    <button onclick="randomizeFillOpacity();">Randomize fill opacity</button> 
    <button onclick="expandLegend();">Expand/Contract Legend</button> 
    <script> 
     var expandLegend = function() { 
      var exp = chart.legend.expanded(); 
      chart.legend.expanded(!exp); 
      chart.update(); 
     } 
    </script> 
</div> 
<div id="chart1" width="100%" height='100%'></div> 
<button onclick="download()">Download</button> 

<script> 
    // 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 data; 

    var randomizeFillOpacity = function() { 
     var rand = Math.random(0,1); 
     for (var i = 0; i < 100; i++) { // modify sine amplitude 
      data[4].values[i].y = Math.sin(i/(5 + rand)) * .4 * rand - .25; 
     } 
     data[4].fillOpacity = rand; 
     chart.update(); 
    }; 

    nv.addGraph(function() { 
     chart = nv.models.lineChart() 
      .options({ 
       transitionDuration: 300, 
       useInteractiveGuideline: true 
      }) 
     ; 

     // chart sub-models (ie. xAxis, yAxis, etc) when accessed directly, return themselves, not the parent chart, so need to chain separately 
     chart.xAxis 
      .axisLabel("Time (s)") 

      .tickFormat(d3.format(',.1f')) 
      .staggerLabels(true) 

      ; 


     chart.yAxis 
      .axisLabel('Voltage (v)') 
      .tickFormat(function(d) { 
       if (d == null) { 
        return 'N/A'; 
       } 
       return d3.format(',.2f')(d); 
      }) 
     ; 

     data = sinAndCos(); 

     d3.select('#chart1').append('svg') 
      .datum(data) 
      .attr("id","svg") 
      .attr("height","1000") 
      .attr("width","1000") 
      .call(chart); 

     nv.utils.windowResize(chart.update); 

     return chart; 
    }); 

    function sinAndCos() { 
     var /*sin = [], 
      sin2 = [],*/ 
      cos = [], 
      /* rand = [],*/ 
      rand2 = [] 
      ; 

     for (var i = 0; i < 100; i++) { 
      cos.push({x: i, y: .5 * Math.cos(i/10)}); 

      rand2.push({x: i, y: Math.cos(i/10) + Math.random()/10 }) 
     } 

     return [ 
      { 
       values: cos, 
       key: "Cosine Wave", 
       color: "#2ca02c" 
      }, 
      { 
       values: rand2, 
       key: "Random Cosine", 
       color: "#667711", 
       strokeWidth: 3.5, 
       fillOpacity: .1, 
       classed: 'dashed', 
       area: true, 
      } 
     ]; 
    } 

</script> 
</body> 
</html> 

回答

4

这将工作:

chart.xAxis 
    .rotateLabels(-45)