2017-01-23 109 views
0

我想實現一個堆疊條形圖,其中一個條形數據集具有半透明顏色和不透明筆畫。但是,筆劃應該放置在內部而不是外部,這是默認行爲。我不知道這可能實現的任何可能的屬性或樣式設置?d3.js條形圖內聯筆畫

我定義行程與

.attr("stroke", function(d) { return zStroke(d.key); }) 
.attr("stroke-width", (function(d) { return zStrokeWidth(d.key) + "px"; })) 

其中zStroke和zStrokeWidth返回杆數據系列的顏色和寬度。

+1

不可能:http://stackoverflow.com/questions/7241393/can-you-control-how-an-svgs-stroke-width-is-drawn。等待SVG 2.0,在2047年發佈。 –

+0

在這種情況下,是否有可能僅縮小我需要爲筆畫佔據幾個像素的輪廓的系列的寬度? – medonja

+1

看看我分享的答案,它有一些選擇。 –

回答

0

只需更改寬度和高度,因爲使用SVG時,邊框位於要應用邊框的條形圖系列的所有邊上,或者不是邊框。例如。

.attr("width", function(d) { return d.withBorder ? 20 : 24; }) 
.attr("height", function(d) { return d.height + d.withBorder ? 0 : 4; }) 
+0

我想過做類似的事情,並嘗試了你的例子,但在我的情況下,當我通過函數而不是x.bandwidth()返回值時,d參數只是一個由兩個元素組成的數組。你應該怎麼做? – medonja

+0

我沒有看到你輸入的是什麼數據,所以也許兩個元素的數組可以代表位置和高度,或者類似的東西。在這種情況下,最好在調用這些'attr'方法之前對數據進行'映射',並將每個數組放入一個對象中,並且該對象還應該具有如'withBorder'爲我的例子工作。 如果兩個元素的數組表示兩個堆積的值,那麼數據需要首先拆分,或者您可以使用'selection.filter',但很難告訴您在沒有看到代碼和數據的情況下所擁有的。順便說一句。如果d是一個數組,d.key如何工作? –