【发布时间】:2016-01-18 01:56:05
【问题描述】:
我正在使用 chart.js 制作饼图。我希望 while 循环生成的每个切片都有不同的颜色。
$pull_request = 'SELECT * FROM `oc_aa_affiliatecollclicktracking`';
$sqli = $db->query($pull_request);
$num_rows=mysqli_num_rows($sqli);
$cur_row=0;
var pieData = [
<?php
while ($row = mysqli_fetch_array($sqli)) {
$color=intval(256*$cur_row/($num_rows-1));
$cur_row++;
echo '{
value: '.$row["product_clicks"].',
color: "rgb(256,'.$color.')", // NEED TO BE RANDOM FOR EVERY ROW/SLICE
highlight: "#333",
label: "' .$row["product_id"].'"
},';
}
?>
];
var ctx = document.getElementById("chart-area").getContext("2d");
window.myPie = new Chart(ctx).Pie(pieData);
} );
我发现随机颜色会在整个图表的页面刷新时发生变化,但对于单个切片则不会。有什么想法吗?
【问题讨论】:
-
您需要将
#999变成一个变量,然后在每次迭代时更改它。 -
只需将您找到的示例放在 while 循环中,以便在每个循环中触发它。
-
编辑了我的代码,请看一下
-
您可以从标签生成哈希,并屏蔽低 3 个字节,使用它作为您的颜色代码,这意味着相同的标签将始终映射到相同的颜色。有时它可能会选择不受欢迎的颜色。另一种方法是使用一组好的颜色,按标签对 SQL 输出进行排序,然后在循环时从数组中弹出颜色。这意味着它将非常稳定,只有在出现新标签时才会改变颜色。