2016-06-29 31 views
2

私の最終目標は、相対的な違いに応じて、値のセットを緑から赤に色付けする単純な水平棒グラフを作成することです。数値を0-100%の範囲に正規化する

それは値の大きい既存のギャップがある場合、例えば、それは(この場合はトップ値がであり、底部がである)このように見ることができ正常に動作します。

Ranked with Variation

私はすべて同じ範囲内にある数の集合でこれをしようとすると、彼らはそうしているので、彼らはすべて「グリーン」ですしかし、それはもはや、私が探しているものを示していません互いに比較的接近している。ここで

は、範囲がまでからであるとき、次のようになります。

Ranked with almost no variation

私のような、これまで0-1正規化関数を適用しようとしている:

:次のようになります私のC#で
x = a + (X - A) * (b - a)/(B - A) 

、また、問題の可能性があり

function getGreenToRed(percent){ 
    r = percent<50 ? 255 : Math.floor(255-(percent*2-100)*255/100); 
    g = percent>50 ? 255 : Math.floor((percent*2)*255/100); 
    return 'rgb('+r+','+g+',0)'; 
} 

、私がしようとしている:最後に

private static int Normalize(List<int> list, int currentValue) { 

     int endOfScale = 1; 
     int topOfScale = 100; 
     int min = list.Min(); 
     int max = list.Max(); 

     var normalized = endOfScale + (currentValue - min) * (topOfScale - endOfScale)/(max - min); 

     return normalized; 

    } 

Normalization of Scale

0は、これらの値は、経由してRGBカラー値を生成するために、クライアント上でJavaScriptを介して実行されていますここで攻撃する側を決定する。

+1

なぜ'62 - > 1 'が間違っていますか?まずはあなたの心をクリアしてください。赤とは何ですか?緑は何ですか?移行はどのくらい速いのですか? – Tommy

+0

したがって、66が最大で100であれば、61は何ですか? 1の代理人は常に1でなければならないのですか? –

+0

@Zohar投稿を編集して、rgbの色変換を行うクライアント側のJavaScriptを組み込んでいます。多分それは問題です。しかし、セットが[66,65,63,63,62,61]であれば、それらのラインに沿って何かが出てくるはずです(グリーン、リロー、ミッドイエロー、ダークイエロー、レッド)。すべての緑色を示す相対的なチャートは、視覚的には何の指標でもありません。 – Patrick

答えて

2

62から0までの正規化は、まさにあなたが望むものです。正規化された値に従ってバーを着色しますが、元の値で長さを描きます。正規化された値は、値の順序で元の値がどこに配置されているかを示しますが、描画される値ではありません。

public Color ColorFromNormalized(int normalized) 
{ 
    if(normalized == 100) 
     return Color.Green; 
    if(normalized > 70) 
     return Color.Yellow; 
    if(normalized > 30) 
     return Color.Orange; 
    return Color.Red 
} 
+0

それは私に正しい方向に向かった、ありがとう。この例では、クライアント側でJavaScriptを使用して固定カラーを使わずに自分の答えを追加しました。 – Patrick

1

ここで自分の質問に答えるが、@セバスチャンを受け入れるのはそれが正しい経路で私を得たからだ。

だけで正規化した値に基づいてバーに色が、元の値と 長さを描く:

彼らは鍵がこの文でした。

これはトリックでした。私は固定色のアプローチが気に入らなかったので、私はそれを少し前進させました。しかし、それは動作します。

色に対して正規化することなくにオリジナル範囲:

Before Normalizing for Color

同じ範囲、後:それは役立つ場合

After normalizing for Color

、ノーマライズ機能が示されています元の質問で

クライアント側のJavaScriptは、の正規化の値をJavaScript RGB関数に渡すことを除いて同じです。

ここで、パラメータパーセントは、0-100 正規化パーセントです。

function getGreenToRed(percent){ 
    r = percent<50 ? 255 : Math.floor(255-(percent*2-100)*255/100); 
    g = percent>50 ? 255 : Math.floor((percent*2)*255/100); 
    return 'rgb('+r+','+g+',0)'; 
} 
関連する問題