棒グラフを生成しています。上記のグラフを生成するデータの範囲は非常に広いため、グラフの一部の領域は常に低く、一部の領域はチャートから外れます。
これを特定の数値 (200 など) に「正規化」する計算は何ですか?大きな値は大きくなるほど縮小され、小さい値は大きくなりますか?
棒グラフを生成しています。上記のグラフを生成するデータの範囲は非常に広いため、グラフの一部の領域は常に低く、一部の領域はチャートから外れます。
これを特定の数値 (200 など) に「正規化」する計算は何ですか?大きな値は大きくなるほど縮小され、小さい値は大きくなりますか?
表示目的で実際にデータを変更する場合は、値を目標値に近づける基本的な方法がいくつかあります。最も簡単なのは、その値で加重平均を行うことです。A' = (1-α)*A + α*B
ここで、alpha は 0 から 1 の間の重み、A はグラフ上の数値、B は目標値です。
たとえば、「正規化」しようとしてい200
て、数値が100 120 200 220 400
それぞれ A に、200 が B に、.5 がアルファに差し込まれている場合、次のようになります。150 160 200 210 300
別のアルファを選択して、ターゲット値に向かってデータをどれだけ伸ばすかを調整できます。.9 のような高い数値はデータをより多く引き伸ばし、.1 のような低い数値はデータの引き伸ばしを少なくします。
少し読んでも構わないと思っているかどうかはわかりませんが、d3.jsフレームワークのスケーリングチュートリアル(http://d3js.org/)は、視覚化のスケーリング部分の非常に堅実な入門書であることがわかりました。
ゼロベースのグラフの場合: 値の最大値を計算し、各棒グラフを表示します:
barHeight[i] = (maxBarHeight*value[i])/maxVal;
ゼロではなく最小値に基づいてグラフを作成する場合でも、グラフの最小値付近のバーの高さをゼロ以外にしたい場合があります。したがって、最小値を計算して表示します。
barHeight[i] = minBarHeight +
(maxBarHeight - minBarHeight ) * (value[i] - minVal) / ( maxVal - minVal );
( Rq : minVal がゼロまたはゼロに近い場合、minVal = minBarHeigth = 0 を設定すると、最初のケースになります)