0

これは私がこれまでに持っているものです: https://gist.github.com/daluu/fc1cbcab68852ed3c5fahttp://bl.ocks.org/daluu/fc1cbcab68852ed3c5fa。Excel の機能を複製しようとしています。

ベース/オリジナルのhttp://bl.ocks.org/daluu/f58884c24ff893186416のように、線はデフォルトのヒストグラムにうまく適合します。また、ヒストグラムを降順で並べ替えることができますが、その際に x スケールを (線形から序数に) 切り替えました。この時点で、行を並べ替えられたヒストグラムに正しくマップできないようです。視覚的に表現すると、次の例のようになります。

残りの部分を機能させるための最良の設計アプローチは何ですか? 単一の x スケールから始めて、線形から序数に切り替える必要はありませんか? もしそうなら、序数スケールを使用してヒストグラム レイアウトを正しく適用する方法や、線形 x スケールをヒストグラム レイアウトへの入力ソースとして使用しない方法と、目的の出力を取得する方法がわかりません。

これまでのコードで同じ序数スケールを使用すると、線は問題ないように見えますが、期待している曲線ではありません。

どんな助けでも感謝します。

4

2 に答える 2

1

この線の主な問題は、バーを並べ替えた後に累積分布を再計算する必要があることです。または、静的なパレート チャートを狙っている場合は、ターゲットの並べ替え順序で累積分布を計算する必要があります。この目的のために、この計算を行うための小さな関数を作成しました。

function calcCDF(data){
  data.forEach(function(d,i){
      if(i === 0){
      d.cum = d.y/dataset.length
    }else{
      d.cum = (d.y/dataset.length) + data[i-1].cum
    }
  })
  return data
}

私の場合、パレートソートのオン/オフを切り替えて、毎回 d.cum プロパティを再計算しています。理論的には、最初に 2 つの累積的な dist プロパティを作成できます。通常の順序付けされた分布の場合は iedcum 、並べ替えられた累積の場合は d.ParetoCum と言いますが、ツールチップで d.cum を使用していて、それに反対することにしました。

軸ごとに、私はよりきれいだと思う単一の序数スケールを使用していますが、目盛りとラベルは線形で得られるようにビンを線引きしなくなったため、ラベルを数値範囲で意味のあるものにするためにいくつかの作業が必要でした規模。ここでの私の解決策は、「1 - 1.99」などの数字の範囲を目盛りとして使用し、目盛りを交互にする機能を追加することでした(その解決策は、 d3.js の Alternating tick paddingから少し前に取得しました)。

バーの並べ替えについては、この d3 の例を参照として使用しています。これは、より単純な/より小さな例のコンテキストで理解する必要がある場合に備えています。

上記のすべてを組み込んだこのフィドルを参照してください。使用したい場合は、チェックを追加して、ユーザーがバーとラインの両方をオフにできないようにすることをお勧めします (コードにメモを残してください...簡単なはずです)。

于 2016-02-17T09:28:43.330 に答える
0

y をソートする代わりに。

data.sort(function(a,b){ return b.y - a.y;});

xをソートする必要があります

data.sort(function(a,b){ return a.x - b.x;});

作業コードはこちら

于 2016-02-08T08:23:59.597 に答える