Поэтому чередовать два цвета между линиями сетки с помощью функции SetFill достаточно просто, однако мне нужно 7 разных цветов в моем линейном графике.
$graph->ygrid->SetFill(true,'red','blue', [5 more colours etc] );
На данный момент я безуспешно пытался добавить дополнительные параметры в функцию SetFill в jpgrapgh.php. Смотрите пример кода ниже:
function SetFill($aFlg=true,$aColor1='lightgray',$aColor2='lightblue',$aColor3='darkblue') {
$this->fill = $aFlg;
$this->fillcolor = array( $aColor1, $aColor2, $aColor3);
}
Я подозреваю, что больше сценариев нуждается в обновлении, чтобы обслужить это изменение?
Это решение позволяет сохранить параметр чередования, но когда вы передаете больше цветов (в моем случае 7), оно заполняет пространство между линиями сетки передаваемым цветом.
$graph->ygrid->SetFill(true,'red','orange','orange','green','orange','orange','red');
Обновите функцию SetFill следующим образом:
function SetFill($aFlg=true,$aColor1='lightgray',$aColor2='lightblue',$aColor3=null,$aColor4=null,$aColor5=null,$aColor6=null,$aColor7=null) {
$this->fill = $aFlg;
$this->fillcolor = array( $aColor1, $aColor2, $aColor3, $aColor4, $aColor5, $aColor6, $aColor7 );
$this->fillcolor = array_filter($this->fillcolor);
}
А в обновлении функции DoStroke:
// If we have passed in 7 colours
if(count($this->fillcolor)==7) {
// Loop out all 7 the colours
while ($i < $nbrgrids) {
$this->img->SetColor($this->fillcolor[$i - 1]); // Offset by 1 because array keys start at 0
$y1 = $y2;
$y2 = $aTicksPos[$i++];
$this->img->FilledRectangle($xl, $y1, $xr, $y2);
}
} else {
// Otherwise, do the normal alternation loop
while ($i < $nbrgrids) {
$y1 = $y2;
$y2 = $aTicksPos[$i++];
$this->img->SetColor($this->fillcolor[$i & 1]);
$this->img->FilledRectangle($xl, $y1, $xr, $y2);
}
}
Других решений пока нет …