2017-01-21 6 views
1

現在、d3を学んでいます(JavaScriptの新機能もあります)、入れ子になったデータを「ロールアップ」値で並べ替えるのに問題があります。ここに私のコード断片である:私は可能性がありますようd3.v4でネストされたデータをソートする

d3.csv("flat_data.csv", function (data) {  

     var nested_data = d3.nest() 
       .key(function(d) { return d.Field1; }) 
       .rollup(function(g) { 
       return d3.sum(g, function(v) {return v.Field2; }); 
       }) 
       .entries(data) 
       .sort(function(a,b) {return d3.descending(a.values,b.values);}); 

     console.log(nested_data); 

は試してみてください、nested_dataは(具体的なエラーがスローされません)頑固にソートされていないです。配列の項目(データ)をロールアップ関数(正しい)によって計算された値でソートすることをお勧めします。 SOに関するいくつかの質問を見てきましたが、少なくとも上記の構文を推奨しています。私は明らかに何かが欠けている - 誰かが助けてくれる?ありがとうございました!

EDIT:

だからAPIリファレンスを相談の上、多分ソート方法は古いのですか? nest.sortValues(Comparator)メソッドがあるように見えますが、コードの正しい構文を理解することができれば、ここではすぐには動作しませんが、正しい方法を見つけることができます私はかかわらず、知っている)おかげで再び

EDIT2:!完全にこのことにより、foxed

!とりわけ有用でないものの中でhttp://bl.ocks.org/phoebebright/raw/3176159/の構文を採用しようとしました。もし誰かがそれを動作させる方法を知っていたら、それは素晴らしいでしょう!おかげ

EDIT3:それだけrolledup機能の場合は1が存在するの葉を、ソート以来

sortValuesは、この場合には不向きです。私は以下の「答え」に従って謎を解いたと思う。ありがとう。

答えて

0

私はそれが自分の質問に答えるために大丈夫だ願っています - が、私は最初に答えを使用していました:

働いていなかった

d3.js sorting by rollup field

。これが誰にでも役立つ場合は、値を.valueに変更するだけです。

  .sort(function(a,b) {return d3.descending(a.value,b.value);}); 

問題が修正され、ロールアップされたデータがソートされます。ありがとう

+1

その小さな細部は簡単に見落とされます。それはD3 v3からv4へのマイナーな変更でした。私の[答え](http://stackoverflow.com/a/40878485/4235784)[* "d3軸は、奇妙な動作をする" *](/ q/33284775)を参照してください。 – altocumulus

+0

ありがとう非常にありがとうございます – MathVandal

+0

@altocumulus幸運な星に感謝していると思ったことはありませんか、そのような推測は壮大に複製可能です!まあ、完全な初心者は、非常に多くのオンラインリソースv3を集中的にd3を学ぶことの挑戦を言う必要があります、ええ、報われている:) – MathVandal

関連する問題