私はあきらめます、私はそれを理解することができません。
で棒グラフを作成しようとしましたが、機能し3d.js
ません。おそらく、複雑な連想配列を処理するのに十分な理解がありません。
私の配列は次の構造を持っています:
{"January"=>{"fail"=>13, "success"=>6},
"February"=>{"success"=>10, "fail"=>4},
"March"=>{"success"=>9, "fail"=>13},
"April"=>{"success"=>16, "fail"=>5},
"May"=>{"fail"=>52, "success"=>23},
"June"=>{"fail"=>7, "success"=>2},
"July"=>{},
"August"=>{"fail"=>6, "success"=>3},
"September"=>{"success"=>54, "fail"=>59},
"October"=>{"success"=>48, "fail"=>78},
"November"=>{"fail"=>4, "success"=>6},
"December"=>{"fail"=>1, "success"=>0}}`
軸の表示が機能しました:
名前を「通常の」配列に変換したため、コードは非常に見苦しく見えます。
monthsNames = new Array();
i = 0;
for (key in data) {
monthsNames[i] = key;
i++;
}
x.domain(monthsNames);
y.domain([0, 100]);
しかし、データの扱い方がわかりません。
私は次のようなことを試みました、svg.selectAll(".bar").data(d3.entries(data))
私が推測する良い始まりは何ですか、しかし私は軸への接続を機能させることができません。
私が作成したいのbar-chart
は、月をx軸とし、毎月2つのバー(それぞれ2色の1つのバー)を持つものです。1つは成功用、もう1つは失敗用です。
誰かがデータの処理方法を教えてもらえますか?前もって感謝します!
編集:
xとyをスケーリングする方法がわかりません。このコードを使用する場合:
var x = d3.scale.ordinal()
.domain(monthsNames)
.range([0, width]);
var y = d3.scale.linear()
.domain([0,100])
.range([0, height]);
そのときは何も表示されません。たとえばx(d.key)またはx(d.value.fail)を使用した後に評価する値を出力すると、それらは本当に奇妙な数値であり、場合によってはNaNでさえあります。
編集:
d3.selectAll(".barsuccess")
.on('mouseover', function(d){
svg.append('text')
.attr("x", x(d.key))
.attr("y", y(d.value.success))
.text(d.value.success+"%")
.attr('class','success')
.style("font-size","0.7em")
})
.on('mouseout', function(d){
d3.selectAll(".success").remove()
});
d3.selectAll(".barfail")
.on('mouseover', function(d){
svg.append('text')
.attr("x", x(d.key)+x.rangeBand()/2)
.attr("y", y(d.value.fail))
.text(d.value.fail+"%")
.attr('class','fail')
.style("font-size","0.7em")
})
.on('mouseout', function(d){
d3.selectAll(".fail").remove()
});