私は平行座標チャートを作成しています。各円は、特定のブランドで、すべてのブランドは、各列内の1つの円があります。ユーザーは、円の上に置いたときにD3 - DOM要素間のパスを描画する
を、私は他の3つの円にそのサークルを結ぶ経路を描画したいと思います同じブランド。問題は、円のX位置がランダムなので、円の変更されたCx値(データではなく)を使用して線を描く必要があることです。
便利なことに、私は自分のグラム要素にグループ化されたすべての4つのブランドの円を持っている:私は要素をつかむことができ、かつ双方向d3.lineのグループの座標は()好き
<g class="line-group">
<circle r="5" cx="340.48700997553686" cy="0" data-brand="Brand X"></circle>
<circle r="5" cx="916.9181438059958" cy="59.347826086956466" data-brand="Brand X"></circle>
<circle r="5" cx="1589.2772695723352" cy="229.1306884480747" data-brand="Brand X"></circle>
<circle r="5" cx="2272.275506967826" cy="0" data-brand="Brand X"></circle>
</g>
が、それは1になりますすべての点を結ぶ線。
var line = d3.svg.line()
.interpolate('basis');
var circles = d3.selectAll('.line-group').selectAll('circle'),
circleCoords = [];
circles.forEach(function(d) {
console.log(circles);
for (i = 0; i < d.length; i++) {
var cx = d3.select(d[i]).attr('cx'),
cy = d3.select(d[i]).attr('cy');
circleCoords.push([cx, cy]);
}
});
lineGroup.append('path')
.attr({
'd' : line(circleCoords)
});
どのように私はこれを構造化しますので、私は、各サークル・グループ(g.lineグループの内部同じブランドの4つの円)のCXとCYの値をつかむことができますか?
私はおそらく、カスタムD属性を作るために、このような何か(擬似コード)を持つ:
path.attr('d', function(d) {
return 'M ' + /* cx of circle 1 */ + ' ' + /* cy of circle 1 */ +
' L ' + /* cx of circle 2 */ + ' ' + /* cy of circle 2 */ +
' L ' + /* cx of circle 3 */ + ' ' + /* cy of circle 3 */ +
' L ' + /* cx of circle 4 */ + ' ' + /* cy of circle 4 */ + ' Z';
})
私はすべての作品があると信じて、私はちょうどそれをまとめるための方法を見つけるように見えることはできません正しく誰かが考えを持っているなら、大いに感謝します!
編集:行定義が追加されました。
私は(ブランドYのための)第二のライングループを追加する場合、これが唯一のパスを作成します(すべてのCIRを結びますブランドXとブランドYのクリーム)。ブランドXとブランドYのそれぞれに独自の行があるように、どうすればいいですか? fiddle:https://jsfiddle.net/uobpp0La/7/ – BastionGamma
Yeapを参照してください。それでも正しいシリーズを選択する必要があります。そのため、各シリーズにユニコードIDを定義する必要があります。データブランドの属性を使用することができます – Klaujesi
どうすればよいでしょうか?私は次のようなものを試しています: 'var allBrandIDs = d3.set(studyData.map(function d){return d.brand_id;})).values();'そして 'allBrandIDs.forEach(function(d){ – BastionGamma