2017-07-17 107 views
0

我一直在使用Mike Bostock的堆疊條形圖(此處爲https://bl.ocks.org/mbostock/4679202)。如何將正確縮放的y軸添加到堆疊的d3條形圖

我已經成功進行了一些修改,但是我所堅持的是試圖添加一個帶有刻度和正確縮放值的y軸。

我認爲這將只是利用這個來完成:

var yAxisRight = d3.svg.axis().scale(y2) //define ticks 
    .orient("right").ticks(5); 

然而,這導致值只有一套堆棧被用於整個Y軸。這會導致比例不正確。所有堆棧組合範圍的值需要用來確定我相信的值的範圍。

有沒有簡單的方法來做到這一點,我失蹤了?總結所有列的範圍。

如果不是,我將如何編寫一個函數來根據所有4列中的值設置範圍?

這裏是什麼,我現在有一個工作的jsfiddle(這是不正確的): https://jsfiddle.net/1jhm7ths/

+0

一個plnkr或jsFiddle與你的代碼將有助於更好地理解你的問題。作爲一個瘋狂的盲目猜測,我會說這與你的規模的'域名'有關... –

+0

@HuguesStefanski它與原始文件非常類似,但我添加了一個鏈接,以便查看究竟是什麼我正在做。 – Keith

+0

您可以在示例中看到,Y軸範圍設置爲0到14,000。但是,它只是從0到14,000範圍內的藍色列中拉取這些數字。隨着塊堆積,它應該從0到約40,000的比例。 – Keith

回答

0

如果我理解正確,您想達到什麼樣的,你需要根據你的堆疊數據,而不是來計算你的範圍原來的。我updated your jsFiddle與線92以下修改:

y2.domain([0, d3.max(dataByGroup, function(d) { return d3.sum(d.values, function(v) {return v.value;}); })]); //added 

這樣做是考慮每個組,計算所有值的總和,而採取的總和的最大

另一方面,我會阻止學習D3的V3,並試圖集中在v4長期支持,最新功能,模塊化,以及其他一些優點。

+0

我更新了錯誤的鏈接 –

+0

雖然縮放比例仍然不正確。如果你看右邊,第一個滴答是20,000。然而,最大的藍色酒吧實際上是14,000;並且它顯示高於20,000。 – Keith

+0

是的,不幸的是很多優秀的例子都是在v2和v3版本上編寫的。我寧願v4,但不像大多數語言,這不是向後兼容。所以很多這些在第4版上完全不起作用。 – Keith