私は、大規模なコレクションからユーザーが選択したデータセットをグラフ化するサイトを作成しています。プロット(ユーザーオプション)を正規化するために、私は各データセットのmax(y)を求めています。私はline().y()
の分母としてそれを使用しようとしていますが、それを取得するには良い方法を見つけることができません。追加パラメータをd3.svg.line()に渡します。
site0586,id,depth,age,sed,quant,conc,influx,level
1, 94297, 0.1400, 8.390, 0.097, 50.5100, 50.5100, 4.87496, "C0P0"
2, 94298, 0.1760, 45.690, 0.083, 52.5800, 52.5800, 4.35011, "C0P0"
3, 94299, 0.2030, 73.660, 0.135, 29.8500, 29.8500, 4.03080, "C0P0"
...
デフォルトのxとyは「年齢」と「濃」ですが、ユーザーが選択可能な、次のとおりです。
データセットはすべて、このようになりCSVをしています。ユーザーはデータセットを選択し、同じグラフ上に次々にプロットされます。プロットが追加されると、全体のmax-xおよびmax-yに適合するようにグラフのスケールが調整され、以前のプロットは更新されて適合します。 Xはデータセットごとにビットごとに異なることがあり、yは5桁の大きさで変化するため、小さな値の線はかなり潰れる可能性があります。これはちょっと変わっていくつもりです。
時々、[0,1]正規化を使ってyを表示したいので、小さな値の傾向は大きな値のものと同じxスケールで表示されます。それはオプションです。簡単 - yドメインを[0,1]にリセットし、各プロットのyをそのデータセットのmax(y)で除算します。完璧に動作するドットについては、私は多くの問題を抱えています。
これは1つのグラフなので、1つのデータ構造を構築します。ユーザーが私がダウンロードした各データセットを選択して、nest()
それを配列にプッシュすると、後でmaxesが必要になるので、私はそこにいる間に各変数のドメインを見つけてheads
というオブジェクトに入れますネストされたデータに追加します。だから私のデータ構造は次のようになります。
datae: [
{ "key": "300",
"values": [
{"site0300": 1, "id": 60383, "depth": 0, ... }, ...
{"site0300": 182, ... }
],
"heads": { "depth": [0,5.9], "age": [107.4,16589.5], ...}
},
{ "key": "586",
"values": [
{"site0586": 1, ...}, ...
],
"heads": {...}
}
]
私が持っている私のline().y()
(潜在的に)可能性が分母を使用するように設定1かthisData.max(Y):
var lineFn = d3.svg.line()
.x(function(d) { return xScale(d[xVar]) })
.y(function(d) { return yScale(d[yVar]/normer) });
私は呼び出しにdatae[thisLineIdx].heads[yVar[1]]
を取得する方法を見つけ出すことはできません除い:
var lines = graf.selectAll('.line')
.data(datae);
lines.enter()
.append('path')
.attr("d", function(d) { return lineFn(d.values) })
lines
の各メンバーはから右のエントリを取得します10だがsvg.line()は配列についての情報しか得たくないので、datae [thisLineIdx] .valuesでデータを呼び出すと何もしない。data [[thisLineIdx] .headsはアクセスできない。
私はすべてのdatae [idx] .headsをグローバルとして設定できますが、それよりも良い方法が必要です - line()内からそのmax(y)を計算する方法はありません。それを呼び出しに含める慣用的な方法もありません。