Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Chartjs random colors for each part of pie chart with data dynamically from database

I want to set dynamically a color for each part of Pie Chart. Since the chart is dynamically created from database I want for each part that is added to the chart(from database) a different color.

I was trying to do this:

$(document).ready(function() { $.ajax({ url: "http://localhost/chartjs/projects_chart.php", method: "GET", success: function(data) {     console.log(data);     var ict_unit = [];     var efficiency = [];     var dynamicColors = function() {         var r = Math.floor(Math.random() * 255);         var g = Math.floor(Math.random() * 255);         var b = Math.floor(Math.random() * 255);         return "rgb(" + r + "," + g + "," + b + ")";     };      for (var i in data) {         ict_unit.push("ICT Unit " + data[i].ict_unit);         efficiency.push(data[i].efficiency);          var coloR=dynamicColors();     }     var chartData = {          labels: ict_unit,         datasets: [{             label: 'Efficiency ',             //strokeColor:backGround,              backgroundColor: [coloR],              borderColor: 'rgba(200, 200, 200, 0.75)',             //hoverBackgroundColor: 'rgba(200, 200, 200, 1)',             hoverBorderColor: 'rgba(200, 200, 200, 1)',             data: efficiency         }]     };      var ctx = $("#my-canvas");     var barGraph = new Chart(ctx, {         type: 'pie',         data: chartData     }) }, error: function(data) {      console.log(data);    },   });  }); 

But I only get one color for the first part of the pie chart.

Could you help me?

like image 762
Nda.S Avatar asked Aug 19 '17 13:08

Nda.S


People also ask

How do you change colors in Chartjs?

We can use the borderColor property of the dataset to change the color of the line that exists in a line chart. You can assign a color to it in hex or RGBA format.

How do I change the background color in Chartjs?

The plugin allows you to enhance your chart. For example zoom in or pan on to your chart. But also change the background color. Using setBackgroundColor(color); //updates the background color of the chart .


2 Answers

You should create a separate array for colors ( just like the ict_unit and efficiency ), instead of assigning a random color value each time to the coloR variable.

Here is the revised version of your code :

$(document).ready(function() {     $.ajax({        url: "https://jsonblob.com/api/jsonBlob/a7176bce-84e0-11e7-8b99-016f34757045",        method: "GET",        success: function(data) {           console.log(data);           var ict_unit = [];           var efficiency = [];           var coloR = [];             var dynamicColors = function() {              var r = Math.floor(Math.random() * 255);              var g = Math.floor(Math.random() * 255);              var b = Math.floor(Math.random() * 255);              return "rgb(" + r + "," + g + "," + b + ")";           };             for (var i in data) {              ict_unit.push("ICT Unit " + data[i].ict_unit);              efficiency.push(data[i].efficiency);              coloR.push(dynamicColors());           }           var chartData = {                labels: ict_unit,              datasets: [{                 label: 'Efficiency ',                 //strokeColor:backGround,                   backgroundColor: coloR,                   borderColor: 'rgba(200, 200, 200, 0.75)',                 //hoverBackgroundColor: 'rgba(200, 200, 200, 1)',                 hoverBorderColor: 'rgba(200, 200, 200, 1)',                 data: efficiency              }]           };             var ctx = $("#my-canvas");           var barGraph = new Chart(ctx, {              type: 'pie',              data: chartData           })        },        error: function(data) {             console.log(data);        },     });  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>  <canvas id="my-canvas"></canvas>
like image 182
ɢʀᴜɴᴛ Avatar answered Sep 17 '22 15:09

ɢʀᴜɴᴛ


An example snippet for rgb color picker between 235 and 52

const randomNum = () => Math.floor(Math.random() * (235 - 52 + 1) + 52);  const randomRGB = () => `rgb(${randomNum()}, ${randomNum()}, ${randomNum()})`;  console.log(randomRGB());

Resource:

  • https://stackoverflow.com/a/45772013/5994546
  • https://stackoverflow.com/a/7228322/5994546
  • https://www.google.com/search?q=color+picker
like image 27
serdarsen Avatar answered Sep 16 '22 15:09

serdarsen