2017-02-22 10 views
0

この例をBostockに従えば、CSVファイルのデータを使用して行が作成されます。したがって、データは実際にd3.csv()機能を使用してロードされます。これらはすべて、かなり標準的な手順です。D3.jsの行に関連するデータを取得します

私が苦労しているのは、データファイルからグローバル変数に再度ロードせずにx/y軸データセットを取得することです。私はdata()メソッドをラインパスに適用しようとしましたが、成功しなかったので、コンソールは単にArray [undefined]と言います。

これを達成するためにどのようなオプションが利用できますか?あなたの提案は高く評価されます。

+0

あなたはボストックの例(httpsのようにコード – Craicerjack

+0

同じコードを含めることができます.ocks.org/mbostock/3883245)、ファイルはCSVファイルになっています。 – Xavier

+0

あなたがそのブロックのコードを使用していて、単純にメソッドをcsvに変更した場合、csv(カンマ区切りvsタブ区切り)にデータを変更しない限り、問題は何もわかりません。 – Craicerjack

答えて

0

この行に関連付けられたデータはundefinedではありません。私はd3.select("path")を使って線を選択したと思います。軸はSVGの前に塗られているので(軸はもちろん、dataはありません)、軸を選択します。だから、

、行を選択するには、単にそのクラスやIDを設定します。

g.append("path") 
    .datum(data) 
    .attr("id", "myLine") 

そしてゲッターとしてdata()を使用します。ここでは

console.log(d3.select("#myLine").data()) 

はbl.ocksで、コンソールをチェックし、データはそこにあります:https://bl.ocks.org/anonymous/e79769c5080a4618b00b946f722d7e39

d3.tsv以外の行に関連するデータを取得しようとしている場合は、は、SVGに線が塗りつぶされるまで待機し、したがってDOMに存在します。これはd3.tsv外にconsole.logで、setTimeoutを使用した例です。

setTimeout(()=>{console.log(d3.select("#myLine").data());}, 1000); 

とそれぞれbl.ocks:// BL:https://bl.ocks.org/anonymous/68ec8087514ff3335d81704796a9a944

+0

あなたの説明に感謝します。 'setTimeout()'関数は実際に動作します。もっと興味深いことに、ミリ秒パラメータが「0.00005」、または「1」または「1000」であっても、動作するように見えます。これは、「SVGに線が描かれ、したがってDOMに存在する」という瞬間を判断する方法があるかどうか疑問に思う。 – Xavier

+0

はい、3つは:コールバックの最後に 'console.timeEnd'を入れます。 –

関連する問題