横棒グラフを作成しました。d3js:条件に応じて変数に基づいて各バーに複数の色を追加する
各バーの幅は、オブジェクト変数ボリュームに基づいています。その後、私はスタックバーの代わりに各バーを作成する必要が実現し、2つのカテゴリは、変数がVOL1 & VOL2、VOL1 + VOL2 = ボリュームをしているオブジェクト。
VOL1 & VOL2値の代わりに、あなたは(a)のデータを配置する必要があり、通常積み上げ棒法に基づく に各バー 2色を割り当てるための直接的な方法がある場合、私は思っていた(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"};
// })
、Iは、IF条件着色法の代わりに典型的に使用して、水平積層バーを作成しますスタックバー法。アイデアのインスピレーション:http://www.d3noob.org/2013/01/select-items-with-if-statement-in-d3js.html
だから、あなたは値 'vol1'と' vol2'の割合に基づいて満たされている単一 'rect'で終わるしたいですか?または、各バーが色で塗りつぶされている2つの 'rect 'が必要ですか? – Mark
値 'vol1'と' vol2'の%に基づいて塗りつぶされた単一の 'rect'です。私は2つの 'rect'を持っている場合、それは典型的な積み重ね棒法になります。 :) – Shawn
あなたが本当にそれを望むなら、それは可能ですが、@mpbastosは以下の通りです。 2つの矩形を使用する方がずっと簡単です。 – Mark