Вы можете создать «минимальное» значение, но только если вы готовы разветвить библиотеку и внести некоторые изменения.
План игры
Самый простой и самый простой способ сделать так, чтобы создать новый вариант, который я буду называть FixedMin
. Если и только если этот новый параметр предоставлен (и другие критерии для неавтоматической сегментации выполнены), вы достигнете эффекта, который вы ищете.
Если вы хотите, как минимум, чтобы быть сгенерированы без предоставления SegmentHeight
, Segments
и FixedMax
, вам также необходимо изменить pImage::computeScale
, который генерирует эти значения конфигурации, когда они не предусмотрены.
Мы должны сделать три изменения:
- Создать новый параметр конфигурации называется
FixedMin
- Adjust положение
- Настройка наклеек Значения текста
Давайте код
Метод drawRadar
проведен в class/pRadar.class.php
. Откройте его. Давайте рассмотрим наш план игры.
Первый, давайте добавим параметр конфигурации. Я добавлю его с другими (линия ~ 38), как так:
$FixedMin = isset($Format["FixedMin"]) ? $Format["FixedMin"] : 0;
Давайте FixedMin
по умолчанию для 0
, потому что это поведение по умолчанию pChart.
Второй, нам нужно каким-то образом обмануть pChart в репозиционирование эти большие значения, как если бы они были меньше, чтобы приспособить смещение FixedMin
создает.
Мы можем это сделать, когда функция вычисляет позицию графика (строка ~ 319). Найдите петлю foreach($DataS["Data"] as $Key => $Value)
(строка ~ 328). Здесь мы будем модифицировать $Value
, добавив следующую строку в верхней части цикла:
$Value -= $FixedMin; // Let's offset the perceived value by our new minimum
Третьего, нам нужно изменить значение текста метки оси.Внутри условной, что $DrawAxisValues
охватывает следующие, вы найдете эту строку кода (строка ~ 255):
$Label = ($j * $SegmentHeight)
Это прекрасно работает; для каждого сегмента он генерирует метку, которая является сегментом, превышающим высоту (например, 4 сегмента из 20 единиц должны генерировать 4 метки с: 20, 40, 60, 80). Но это не сработает с нашим FixedMin
. Давайте повторно используем смещение. В этом случае мы увеличиваем смещение, создавая иллюзию минимума. Замените эту строку с этим:
$Label = ($j * $SegmentHeight) + $FixedMin;
резюмировать
Мы создали новые переменные конфигурации для минимального сегмента; и для каждого значения мы вычитали это минимальное значение (или смещение); и переработал метки оси, добавив это минимальное значение (или смещение).
Предосторежения
Мы только модифицировали радарные диаграммы; никакой другой тип диаграммы не будет затронут. Do не попытка использовать данные со значениями, которые ниже установленного минимума. Опасность этого может быть связана с тем, почему автор не включил этот вариант.
Показать и рассказать
У меня нет доступа к набору данных, так что я использовал пример pChart и наткнулся на «обзор приложения» образец так, чтобы все показатели были в пределах от 20 до 40 лет
// FixedMin set to 0, "default" behavior
$Options = array(
'SegmentHeight' => 20,
'Segments' => 2,
'FixedMax' => 40,
'FixedMin' => 0, // And so on...
Как и следовало ожидать, теперь давайте проверим наш новый код ...
// FixedMin set to 20, smaller SegmentHeight
$Options = array(
'SegmentHeight' => 10,
'Segments' => 2,
'FixedMax' => 40,
'FixedMin' => 20, // And so on...
Ta-da.
Что делать, если вы уроните свое самое низкое значение? Тогда это будет по умолчанию для центра, правильно? – JSuar
Я тоже думал, но это не работает. Самое низкое значение равно 1, и все же радар показывает значение 0. – lorenz
Что делать, если вы вычтите один из всех ваших значений, тогда ваш диапазон будет 0-3. Это, надеюсь, поместит ваши ценности в центр. Затем вы можете изменить ярлыки, чтобы показать 1-4. – JSuar