2013-12-19 5 views
3

Я использую лепестковая диаграмма похожа на данном примере: диапазоны https://pchart.net/doc.draw.radar.htmlpChart Radar диаграмма с минимальным 1

Мои данные счетом 1 до 4, так что я настроил несколько вариантов:

$options = array(
    'SegmentHeight' => 1, 
    'Segments' => 3, 
    'FixedMax' => 4 
); 

One проблема остается: даже если мой самый низкий балл равен 1, радарная диаграмма всегда имеет значение 0 в центре.

Как изменить минимальное значение на диаграмме на 1?

+0

Что делать, если вы уроните свое самое низкое значение? Тогда это будет по умолчанию для центра, правильно? – JSuar

+0

Я тоже думал, но это не работает. Самое низкое значение равно 1, и все же радар показывает значение 0. – lorenz

+0

Что делать, если вы вычтите один из всех ваших значений, тогда ваш диапазон будет 0-3. Это, надеюсь, поместит ваши ценности в центр. Затем вы можете изменить ярлыки, чтобы показать 1-4. – JSuar

ответ

4

Вы можете создать «минимальное» значение, но только если вы готовы разветвить библиотеку и внести некоторые изменения.

План игры

Самый простой и самый простой способ сделать так, чтобы создать новый вариант, который я буду называть FixedMin. Если и только если этот новый параметр предоставлен (и другие критерии для неавтоматической сегментации выполнены), вы достигнете эффекта, который вы ищете.

Если вы хотите, как минимум, чтобы быть сгенерированы без предоставления SegmentHeight, Segments и FixedMax, вам также необходимо изменить pImage::computeScale, который генерирует эти значения конфигурации, когда они не предусмотрены.

Мы должны сделать три изменения:

  1. Создать новый параметр конфигурации называется FixedMin
  2. Adjust положение
  3. Настройка наклеек Значения текста

Давайте код

Метод 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... 

Default behavior

Как и следовало ожидать, теперь давайте проверим наш новый код ...

// FixedMin set to 20, smaller SegmentHeight 
$Options = array(
'SegmentHeight' => 10, 
'Segments' => 2, 
'FixedMax' => 40, 
'FixedMin' => 20, // And so on... 

With a minimum of 20

Ta-da.

+0

Я награждаю вас щедростью за исследование и доказательство концепции (до истечения времени), и я буду принимать ответ, как только я его осуществил. Большое спасибо, Джейкоб! – lorenz

+0

Работает отлично - большое спасибо! – lorenz

+0

Спасибо, очень полезно !! – Alex

Смежные вопросы