Я пытаюсь сделать то же самое, что и здесь: ChartJS - разные цвета для каждой точки данных
Но в PHP я не могу использовать селекторы javascript, такие как принятые там ответы.
Для построения диаграмм я использую переменную сессий PHP в запросе SQL, поэтому необходимо интегрировать код с PHP. У меня есть несколько диаграмм, которые я загружаю с помощью Ajax с переключателем.
Я инстанцирую значение параметров Chartjs следующим образом:
$html .= "<p>Results from " . $_SESSION['statDateFrom'] . " to " . $_SESSION['statDateTo'] . "</p>";
$html .= "<canvas id='myChart' width='400' height='300'>";
$html .= "</canvas>";
$html .= $legend;
$html .= "<script>";
$html .= "var ctx=document.getElementById('myChart').getContext('2d');";
$html .= "var myChart = new Chart(ctx, {";
$html .= "type:'". $type . "',";
$html .= "data:" . $mydata . ",";
$html .= "options: " . $options;
$html .= "});";
$html .= "</script>";
И диаграмма, которую я хочу настроить здесь, представляет собой линейную диаграмму, на которой я держу только точку. Я хочу раскрасить точку разными цветами в зависимости от значения оси Y
На данный момент я пробовал это:
$arrDatasets = array(
array('label' => "event_name",
'fill' => false,
'showLine' => false,
'pointBackgroundColor' => array("#82f827", "#ff4040", "#31698A", "#6666FF","#ff7F50","#fe6b60","#6c1ba1","#97bdd6"),
'data' => $datasetR1
));
$arrReturn = (array('labels' => $labels,
'datasets' => $arrDatasets));
$mydata = json_encode(($arrReturn));
Передача массива в pointBackgroundColor окончательно изменяет цвета точек, но добавляет цвета только к первым результатам!
Итак, я думаю, мне просто нужно выполнить цикл с условиями, но я не знаю, как действовать дальше.
выполните цикл через $datasetR1
и подготовьте '$ colorsArray', а при определении $arrDatasets
используйте $colorsArray
.
Я поместил массив цветов в переменную, но как мне пройти через набор данных $ и определить цвета, связанные со значением?
foreach ($arrDatasets as $item) { // Get value from $item and push to $colorsArray }
Возможный дубликат Chartjs - Цикл через набор данных и назначение цветов
Хорошо, я сделал это с помощью sandyJoshi.
это код:
foreach($datasetR1 as $value){
if ($value == 1){
array_push($intColors, "#82f827");
}
elseif ($value == 2){
array_push($intColors, "#ff4040");
}
elseif ($value == 3){
array_push($intColors, "#31698A");
}
elseif ($value == 4){
array_push($intColors, "#6666FF");
}
elseif ($value == 5){
array_push($intColors, "#ff7F50");
}
elseif ($value == 6){
array_push($intColors, "#fe6b60");
}
elseif ($value == 7){
array_push($intColors, "#6c1ba1");
}
elseif ($value == 8){
array_push($intColors, "#97bdd6");
}
}
Кстати, спасибо за голосование против, отличное сообщество.
Поэтому перед генерацией
$arrDatasets
подготовьте массив, который будет иметь значение цвета для всей вашей точки. затем поместите ссылку вpointBackgroundColor