2017-12-26 23 views
2

返すvalue0の場合、labelを円グラフのlegendから非表示にする。誰でもNVD3.jsの正しい方向に向けることができますか?NVD3.jsの値が0の場合、凡例項目を非表示にする円チャート

nv.addGraph(function() { 
    var donutChart = nv.models.pieChart() 
     .x(function (d) { 
      return d.label 
     }) 
     .y(function (d) { 
      return d.value 
     }) 

     d3.select("#chart-devices svg") 
     .datum(data) 
     .transition().duration(1200) 
     .call(donutChart); 

    nv.utils.windowResize(donutChart.update); 
    return donutChart; 
}); 
+0

私はあなたができる最善のは、しかし、ここで予め値= 0 – beaver

+0

とのデータ項目を削除することですが(「ゼロ」との項目を削除しようとしているフィドルだと思います値)を伝えてください:https://jsfiddle.net/beaver71/yt7vrohk/ – beaver

+0

ありがとうございます@ビーバー。私は 'of undefined'に ​​'プロパティを読み取れません'というエラーが表示されます。また、クラスを追加して、凡例項目を「0」にすることを隠しているのかどうか疑問に思った。投稿されたソリューションは、いくつかの項目で素晴らしい作品ですが、多くの場合、明らかなギャップがあります。 – Darren

答えて

1

可能答えがrenderEndイベントで値= 0の項目を削除することである。

chart.dispatch.on('renderEnd', function() { 
    console.log("renderEnd"); 
    d3.selectAll(".nv-legend .nv-series")[0].forEach(function (d) { 
     //get the data 
     var t = d3.select(d).data()[0]; 
     // remove item from legend 
     if (t.value == 0) 
      d3.select(d).remove(); 
    }); 
}); 

別の可能性は、タイムアウト後に項目を削除することである。

が両方の場合において
setTimeout(function() { 
    d3.selectAll(".nv-legend .nv-series")[0].forEach(function (d) { 
     //get the data 
     var t = d3.select(d).data()[0]; 
     // remove item from legend 
     if (t.value == 0) 
      d3.select(d).remove(); 
    }); 
}, 1); 

残りの項目の間にはギャップがあります。ここで

はフィドル(最初のオプション)です:https://jsfiddle.net/beaver71/yt7vrohk/

関連する問題