2017-02-27 16 views
0

d3.jsライブラリを使用してインタラクティブグラフを作成しようとしています。私は、格納されたjsonファイルから、または辞書から直接私のd3オブジェクトへのデータの供給を交互にしたいと思っています。私は辞書dが作成されたユーザ入力の際にファイルから読み取らずにd3.jsonを使用する

d3.json('/path/to/file.json') 

を使用したファイルからの読み込みに

。私は使用しようとしました

user_file = json.dumps(d) 
d3.json(user_file) 

無駄です。

解決方法があります。ユーザー入力時にjson.dump(d, '/path/to/user_file.json')というファイルを作成し、そこから直接d3.json('/path/to/user_file.json')と読んでください。エレガントであまり気品がないだけでなく、新しいjsonファイルがキャッシュされるという追加の問題が追加されます。

アドバイスはありますか?私はjavascriptを初めて使っているので、「ベストプラクティス」に関するアドバイスも高く評価されます。

答えて

1

d3.json()には、通常url( '/path/to/file.json')と、あなたの例から外した結果を処理する関数という2つの引数があります。このハンドラは、多くの場合、d3.json()の呼び出しの中で宣言された無名関数ですが、名前付き関数にすることができます。私は、jsonの結果を処理するための名前付き関数を定義し、次に同じ関数を使用してユーザー入力で作成されたデータを処理します。

function resultHandler(error, data){ 
    ... do stuff w/ data ... 
} 

d3.json('/path/to/file.json', resultHandler); 

function userInputHandler() { 
    ... create data ... 
    resultHandler(null, d); 
} 
0

This articleでは、その方法を部分的に説明しています。

彼らが使用する例がある:あなたが興味を持っている

d3.select("body").selectAll("p") 
    .data(dataset) 
    .enter() 
    .append("p") 
    .text("New paragraph!"); 

部分は、データ・セットを初期化し.data()です。

関連する問題