2011-08-02 8 views
1

私は非常に単純な動的棒グラフ(CSS/PHP)を作成していますが、基本的に私が表示する必要があるのは、各バー幅がpxの接点(各接点= 1ピクセル)は非常に些細なものではありませんか? 数学 - 動的図表、比率を維持する

_______.____________________600px 
|  |      | 
| mario | ===== (54) px   | 
| julie | ========= (65) px  | 
| john | === (40) px   | 
| mary | ============= (70) px | 
|_______|________________________| 
     0% 30% 50% 80% 100% 

は今、私の問題は、のが600PXを言わせて、グラフ、コンテナが固定幅でなければならないということですので、theeseの一つが、600人の以上の連絡先を持っている場合、何が起こりますか?はい、私は知っている、それはねじます。 ;-)

このように、それぞれの合計の縮尺がグラフの終わりに達しないようにパーセントに変換するにはどうすればよいですか?

ありがとうございます。

current_width =現在の値*(MAX_WIDTH/MAX_VALUE)

MAX_WIDTH = 600PXなどの

答えて

3

すべての値(54 + 65 + 40 + 70 = 229)を合計し、各値の割合(54/229 = 23.58%)を計算し、600px )。その値をバーの幅として設定することができます(最初のバーは141pxになります)。

(おそらくループ内でこれらの値を計算するだろうが)のコードでは、それは次のようになります。

$total = 229; 
$bar1 = 54; 
$bar1Length = round(600 * ($bar1/$total)); // 141 
+0

+1こんにちは、私は別の少し疑問を持っている –

+0

;-)ありがとう;-)感謝、式何ですチャートは、0%〜10%〜20%〜100%常に600に基づいていますか?ありがとう、相棒! –

+0

'$ bar1/$ total'はパーセントを分数(たとえば0.754)で与え、74%に類似するものを100倍にします。つまりround(($ bar1/$ total)* 100)のようなものです。 "%" ' –

1

何か。

これは単なる疑似コードです。あなたの質問は詳細を提供していないので、私は何か具体的なものを書くことはできません。

+0

1あなたは –

1

バーで利用可能な幅がtotalWidthある場合は、Cでこのような何かを(行います擬似コードは、I)はPHPを知らない:私は以下を追加したい場合は

int maxContacts = 0; 

for (int i = 0; i < numberOfUsers; i++) 
{ 
    if (users[i].numberOfContacts > maxContacts) 
     maxContacts = users[i].numberOfContacts; 
} 

// now you have the max number of contacts 

for (int i = 0; i < numberOfUsers; i++) 
{ 
    widthPercent = users[i].numberOfContacts/maxContacts; // this is the percentage 
    display_width_for_this_user = totalWidth * widthPercent; // gives the relative width 
} 
関連する問題