0

現在、タイトルのリスト (x 軸) に対して数字のリスト (y 軸) をプロットしています。各番号は、複数の Web サイトに対応できます。現在、d3 が提供する昇順関数を使用して並べ替えています。現在、番号またはタイトルのいずれかを選択できるドロップダウン メニューがあり、各オプションはそれぞれの選択で個別に並べ替えられます。しかし、タイトルでアルファベット順に並べ替え、それをアルファベット順に保ち、番号でも並べ替える方法があるかどうか疑問に思っていました。今のところ、どちらかしかできません。

例: 私のデータは次のように CSV に保存されます。

"id","name"  
1,"youtube"  
1,"google"  
2,"google"  
3,"nike"  
4,"google"  

それから私は使用します

d3.csv("csvTestFile.csv", function (dataset) 

ファイルを読み込み、ID 番号を int に変換します。

並べ替えるには、次のようにします。

data.sort(function(a, b) { return d3.ascending(a.id, b.id)});  

IDでソートします。名前で並べ替えるには、次のようにします。

data.sort(function(a, b) { return d3.ascending(a.name, b.name)});  

これらは両方とも適切に機能しますが、最初に ID で並べ替え、次に名前で並べ替えたいと思います。したがって、軸は (原点から開始して) 1、2、3、4 を y 軸の上に表示し、google、nike、youtube を x 軸の下に表示します。今、並べ替えようとすると、y 軸までは 1、2、3、4 になり、x 軸は youtube、google、nike の下、または x 軸は 1、2 の google、youtube、nike になります。 、4、3 y 軸を上に。

私が欲しいのは、y軸の上に1、2、3、4(数値でソート)と、x軸の下にグーグル、ナイキ、ユーチューブ(アルファベット順にソート)を同時に表示することです。これが散布図であることを考えると、軸の目盛りを再配置するようなものになるはずですが、どうやってそれを行うのかよくわかりません。

4

1 に答える 1

2

入力値がカテゴリカル スケールの出力値にマッピングされる順序は、それらが に与えられる順序によって異なります.domain()。必要なことを達成するために必要なのは、スケールを作成するときにそれに応じて値をソートすることです。つまり、次のようなものです。

var scale = d3.scale.ordinal()
   .domain(data.sort(function(a, b) { return d3.ascending(a.name, b.name); }))
   .range([...]);
于 2013-06-11T16:57:46.657 に答える