ограничение высоты столбцов на графике в зависимости от доступной высоты - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть одна страница, на которой отображается гистограмма, и значения могут варьироваться от крошечного диапазона (от 0 до 30) до большого диапазона (от 0 до 10000).

Моя проблема заключается в отображении ее в видеdiv, который имеет максимальную высоту, в моем случае столбцы не могут быть больше 90 пикселей.

Один пример:

bar graph

Зная, что максимальная высота90px, я подумал о том, чтобы проверить, что является самым высоким столбцом (имеется в виду, что это 100%), а , тогда как остальные являются процентами от этого .Таким образом, я могу контролировать высоту (самая большая будет иметь 90 пикселей) каждого и оставаться в пределах высоты.

Пока мой код: (значения в этом коде не связаны сизображение выше)

$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 Ответ

1 голос
/ 03 ноября 2011

Вы можете рассчитать один масштабный коэффициент, который вы применяете ко всем столбцам:

$scale = $limitedHeight / $biggestBar;

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

Это немного упростит ваши расчеты, но общий подход кажется разумным.И проблема с огромной разницей в высоте неизбежна, когда вы используете линейный масштаб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...