根据可用高度限制图形中条形的高度

时间:2011-11-03 16:19:33

标签: php graph height

我有一个页面显示条形图,值可以从微小范围(0到30)到大范围(0到10000)不等。

我的问题是在具有最大高度的div中显示它,在我的情况下,条形不能超过90px。

一个例子:

bar graph

知道最大高度是90px,我想做的是检查哪个是最高栏(意味着这个是100%),然后其他是百分比那个。通过这种方式,我可以控制每个高度(最大值为90px),并保持在高度的限制范围内。

到目前为止我的代码:(此代码中的值与上图不相关)

$limitedHeight = 90;

$bar1 = 300;
$bar2 = 700;
$bar3 = 150;

$biggestBar = max(array($bar1, $bar2, $bar3));

//knowing this, I will force each bar to the limited height:
//first, for each, get the percentage:
$bar1Percent = intval(($bar1 * 100) / $biggestBar);
$bar2Percent = intval(($bar2 * 100) / $biggestBar);
$bar3Percent = intval(($bar3 * 100) / $biggestBar);

//then, force the new heights:
$bar1Height = intval(($bar1Percent * $limitedHeight) / 100);
$bar2Height = intval(($bar2Percent * $limitedHeight) / 100);
$bar3Height = intval(($bar3Percent * $limitedHeight) / 100);

//place the height into the bars:
echo '<div class="bar1" style="height: ' . $bar1Height . 'px"></div>
<div class="bar2" style="height: ' . $bar2Height . 'px"></div>
<div class="bar3" style="height: ' . $bar3Height . 'px"></div>';

我的问题:

这是正确的做法吗? 或者有没有人有更好的解决方案?

(这个解决方案可能有一个问题:如果条形“A”只是“10”,条形“B”是“1000”,计算的(有限的)高度将有很大的差异,但我想它是什么它是,这个比例得到尊重)。

1 个答案:

答案 0 :(得分:1)

您可以计算应用于所有条形的单个比例因子:

$scale = $limitedHeight / $biggestBar;

$bar1Height = intval($bar1 * $scale);
$bar2Height = intval($bar2 * $scale);
$bar3Height = intval($bar3 * $scale);

这只会简化你的计算,但整体方法看似合理。当你使用线性刻度时,巨大高度差的问题是不可避免的。