d3 のシンボル メカニズムを使用して、データ セットごとに一意のシンボルを指定するのに問題があります。データは次のようになります: [[{x: 1, y:1},{x: 2, y:2},{x: 3, y:3}], [{x: 1, y:1},{ x:2、y:4}、{x:3、y:9}]など]
シンボルを書き出すコードの部分は次のようになります。点のベクトルごとに系列グループを作成します。それで:
series.selectAll("g.points")
//this selects all <g> elements with class points (there aren't any yet)
.data(Object) //drill down into the nested Data
.enter()
.append("g") //create groups then move them to the data location
.attr("transform", function(d, i) {
return "translate(" + xScale(d.x) + "," + yScale(d.y) + ")";
})
.append("path")
.attr("d", function(d,i,j){
return (d3.svg.symbol().type(d3.svg.symbolTypes[j]));
}
);
または、少なくともそれが私がそれを機能させたい方法です。問題は、関数 d3.svg.symbol() を他の関数から返すことができないことです。関数を「タイプ」引数に入れようとすると、データは j が何であるか (シリーズのインデックス) を知るために正しくスコープされなくなります。
正しいですが、各データポイントに一意のシンボルは必要ありません。各シリーズに一意のシンボルが必要です。データは複数の配列 (シリーズ) で構成され、各配列は任意の数の点 (x,y) を持つことができます。配列ごとに異なるシンボルが欲しいのですが、それは j が私に与えるべきものです。データ (この例では 2 つの配列が示されているため、i は 0 の次に 1 です) を系列の選択に関連付けます。次に、データ オブジェクトをポイント選択に関連付けます。つまり、i は各配列内のポイントのインデックスになり、j は元の配列/一連のデータのインデックスになります。私は実際にこの構文を別の場所からコピーしましたが、他のインスタンス (グループ化された棒グラフの一連の棒の色付けなど) では問題なく機能しますが、なぜ機能するのか正確にはわかりませんでした...
任意のガイダンスをいただければ幸いです。ありがとう!