我創建了一個水平條形圖。d3js:根據變量使用if條件爲每個條添加多種顏色
每個條的寬度基於對象變量卷。後來才知道我需要使每個條形疊層條代替,所述2類對象變量是VOL1 & VOL2,其中VOL1 + VOL2 = 體積。
我想知道是否有基於VOL1 & VOL2值而不是通常的堆疊棒法每個杆分配2色到直接的方式在需要的(a)安排數據在基於其類別的陣列中,(b)定義x,y,y0(c)爲每個陣列條分配不同的顏色。
數據結構:
var data = [
{ "merchant": "A",
"volume": 100,
"vol1": 48,
"vol2": 52
},
{...},
{...}
];
的特定的代碼來繪製圖表是:
var bar = d3.select(".mainGroup").selectAll(".bar")
.data(data_merchantTop100Vol);
bar.attr("x", 0)
.attr("y", d => y(d.merchant))
.attr("height", y.rangeBand())
.transition().duration(50)
.attr("width", d => x(d.volume));
bar.enter().append("rect")
.attr("class", "bar")
.attr("x", 0)
.attr("y", d => y(d.merchant))
.attr("height", y.rangeBand())
.transition().duration(50)
.attr("width", d => x(d.volume))
// THIS PART IS TO FILL 2 COLORS TO THE 2 SECTIONS OF EACH BAR
// .style("fill", function(d) {
// if(d.Vol1) { return "blue"}
// else if (d.vol2) { return "red"};
// })
總之,我想的典型使用,如果條件着色方法以創建水平堆疊巴,而不是堆疊條形法。理念的靈感:http://www.d3noob.org/2013/01/select-items-with-if-statement-in-d3js.html
所以,你想用一個基於價值的百分比'vol1'和'vol2'填補了單'rect'就結了?或者你想要兩個'rect',每個條被填充到一個顏色? – Mark
一個單一的'rect',根據'vol1'和'vol2'值的百分比填充。如果我有2個'rect',它將是典型的堆棧條方法。 :) – Shawn
這是可行的,如果你真的想要它,但@mpbastos是正確的。使用兩個rects更簡單。 – Mark