2017-08-15 154 views
0

如何爲水平d3條形圖設置x和y域,所有負值爲?對於所有正值條形圖域將是:d3,js在所有負值上設置水平條形圖上的X和Y域

x.domain([0, d3.max(data, function (d) { 
     return Math.abs(d.value); 
    })]); 
    y.domain(data.map(function (d) { 
     return d.dataset; 
    })); 

對於正值和負值條形圖,該領域將是:

x.domain(d3.extent(data, function (d) { 
    return d.value; 
})); 

y.domain(data.map(function (d) { 
    return d.dataset; 
})); 

但還沒當條形圖具有所有負值時,能夠得到正確結果。

謝謝您的考慮。

+0

到底出了什麼當值都是負的? 'd3.extent'應該在負值上工作,它所做的只是尋找最小值/最大值。 –

+0

x軸從-10開始而不是零,y軸線不再顯示,沿y軸的標籤不再顯示。 – user1608142

+0

我有以下代碼行:var x = d3.scaleLinear() .range([0,500]);當我用400替換500時,y軸和標籤再次出現。但x軸仍然從-10開始。 x軸和y軸的底部之間應該有0-10線。 – user1608142

回答

0

您的邊距不當,以及其他一些事情。

https://jsfiddle.net/fmr1x1gu/7/

var margin = {top: 30, right: 10, bottom: 50, left: 50}, 
    width = 500 - margin.left - margin.right, 
    height = 300 - margin.top - margin.bottom; 

svg.selectAll(".bar") 
    .data(data) 
    .enter().append("rect") 
    .attr("class", function (d) { 
     return "bar bar--" + (d.value < 0 ? "negative" : "positive"); 
    }) 
    .attr("x", function (d) { 
     return width - x(d.value); 
    }) 
    .attr("y", function (d) { 
     return y(d.dataset); 
    }) 
    .attr("width", function (d) { 
     return x(d.value); 
    }) 
    .attr("height", y.bandwidth()); 
+0

謝謝你看看這個埃裏克。我不認爲你的解決方案是我正在尋找的。條應從x軸上的零開始,條上的標籤應該可見。看看這個有正負值組合的小提琴。 https://jsfiddle.net/Kavitha_2817/fmr1x1gu/ – user1608142

+0

好吧,我現在得到你想要做的。 https://jsfiddle.net/fmr1x1gu/11/ –