examples chartjs chart bordercolor javascript chart.js

javascript - examples - chartjs bordercolor



Color diferente para cada barra en un gráfico de barras; ChartJS (17)

A partir de agosto de 2019, Chart.js ahora tiene esta funcionalidad incorporada.

Simplemente necesita proporcionar una matriz a backgroundColor.

Ejemplo tomado de https://www.chartjs.org/docs/latest/getting-started/

Antes de:

data: { labels: [''January'', ''February'', ''March'', ''April'', ''May'', ''June'', ''July''], datasets: [{ label: ''My First dataset'', backgroundColor: ''rgb(255, 99, 132)'', borderColor: ''rgb(255, 99, 132)'', data: [0, 10, 5, 2, 20, 30, 45] }] },

Después:

data: { labels: [''January'', ''February'', ''March'', ''April'', ''May'', ''June'', ''July''], datasets: [{ label: ''My First dataset'', backgroundColor: [''rgb(255, 99, 132)'',''rgb(0, 255, 0)'',''rgb(255, 99, 132)'',''rgb(128, 255, 0)'',''rgb(0, 255, 255)'',''rgb(255, 255, 0)'',''rgb(255, 255, 128)''], borderColor: ''rgb(255, 99, 132)'', data: [0, 10, 5, 2, 20, 30, 45] }] },

Acabo de probar este método y funciona. Cada barra tiene un color diferente.

Estoy usando ChartJS en un proyecto en el que estoy trabajando y necesito un color diferente para cada barra en un Gráfico de barras.

Aquí hay un ejemplo del conjunto de datos del gráfico de barras:

var barChartData = { labels: ["001", "002", "003", "004", "005", "006", "007"], datasets: [{ label: "My First dataset", fillColor: "rgba(220,220,220,0.5)", strokeColor: "rgba(220,220,220,0.8)", highlightFill: "rgba(220,220,220,0.75)", highlightStroke: "rgba(220,220,220,1)", data: [20, 59, 80, 81, 56, 55, 40] }] };

¿Hay alguna manera de pintar cada barra de manera diferente?


A partir de v2, simplemente puede especificar una matriz de valores para corresponder a un color para cada barra a través de la propiedad backgroundColor :

datasets: [{ label: "My First dataset", data: [20, 59, 80, 81, 56, 55, 40], backgroundColor: ["red", "blue", "green", "blue", "red", "blue"], }],

Esto también es posible para borderColor , hoverBackgroundColor , hoverBorderColor .

De la documentación en las Propiedades del conjunto de datos de gráfico de barras :

Algunas propiedades se pueden especificar como una matriz. Si se establecen en un valor de matriz, el primer valor se aplica a la primera barra, el segundo valor a la segunda barra, y así sucesivamente.


Acabo de recibir este problema recientemente, y aquí está mi solución

var labels = ["001", "002", "003", "004", "005", "006", "007"]; var data = [20, 59, 80, 81, 56, 55, 40]; for (var i = 0, len = labels.length; i < len; i++) { background_colors.push(getRandomColor());// I use @Benjamin method here } var barChartData = { labels: labels, datasets: [{ label: "My First dataset", fillColor: "rgba(220,220,220,0.5)", strokeColor: "rgba(220,220,220,0.8)", highlightFill: "rgba(220,220,220,0.75)", highlightStroke: "rgba(220,220,220,1)", backgroundColor: background_colors, data: data }] };


Aquí, resolví este problema haciendo dos funciones.

1. dynamicColors () para generar color aleatorio

function dynamicColors() { var r = Math.floor(Math.random() * 255); var g = Math.floor(Math.random() * 255); var b = Math.floor(Math.random() * 255); return "rgba(" + r + "," + g + "," + b + ", 0.5)"; }

2. poolColors () para crear una variedad de colores

function poolColors(a) { var pool = []; for(i = 0; i < a; i++) { pool.push(dynamicColors()); } return pool; }

Entonces, solo pásalo

datasets: [{ data: arrData, backgroundColor: poolColors(arrData.length), borderColor: poolColors(arrData.length), borderWidth: 1 }]


Código basado en la siguiente solicitud de extracción :

datapoint.color = ''hsl('' + (360 * index / data.length) + '', 100%, 50%)'';


Después de buscar en el archivo Chart.Bar.js, he logrado encontrar la solución. He usado esta función para generar un color aleatorio:

function getRandomColor() { var letters = ''0123456789ABCDEF''.split(''''); var color = ''#''; for (var i = 0; i < 6; i++ ) { color += letters[Math.floor(Math.random() * 16)]; } return color; }

Lo agregué al final del archivo y llamé a esta función dentro del "fillColor:" debajo de

helpers.each(dataset.data,function(dataPoint,index){ //Add a new point for each piece of data, passing any required data to draw.

así que ahora se ve así:

helpers.each(dataset.data,function(dataPoint,index){ //Add a new point for each piece of data, passing any required data to draw. datasetObject.bars.push(new this.BarClass({ value : dataPoint, label : data.labels[index], datasetLabel: dataset.label, strokeColor : dataset.strokeColor, fillColor : getRandomColor(), highlightFill : dataset.highlightFill || dataset.fillColor, highlightStroke : dataset.highlightStroke || dataset.strokeColor })); },this);

y funciona, obtengo un color diferente para cada barra.


Esto funciona para mí en la versión actual 2.7.1 :

function colorizePercentageChart(myObjBar) { var bars = myObjBar.data.datasets[0].data; console.log(myObjBar.data.datasets[0]); for (i = 0; i < bars.length; i++) { var color = "green"; if(parseFloat(bars[i]) < 95){ color = "yellow"; } if(parseFloat(bars[i]) < 50){ color = "red"; } console.log(color); myObjBar.data.datasets[0].backgroundColor[i] = color; } myObjBar.update();

}


Generar colores al azar;

function getRandomColor() { var letters = ''0123456789ABCDEF''.split(''''); var color = ''#''; for (var i = 0; i < 6; i++) { color += letters[Math.floor(Math.random() * 16)]; } return color; }

y llamarlo para cada registro;

function getRandomColorEachEmployee(count) { var data =[]; for (var i = 0; i < count; i++) { data.push(getRandomColor()); } return data; }

finalmente establecer colores;

var data = { labels: jsonData.employees, // your labels datasets: [{ data: jsonData.approvedRatios, // your data backgroundColor: getRandomColorEachEmployee(jsonData.employees.length) }] };


Puede generar fácilmente con gráficos de livegap
Seleccione Mulicolors del menú Bar


(fuente: livegap.com )

** la biblioteca de gráficos utilizada es la versión modificada chartnew.js de la biblioteca chart.js
con el código chartnew.js será algo como esto

var barChartData = { labels: ["001", "002", "003", "004", "005", "006", "007"], datasets: [ { label: "My First dataset", fillColor: ["rgba(0,10,220,0.5)","rgba(220,0,10,0.5)","rgba(220,0,0,0.5)","rgba(120,250,120,0.5)" ], strokeColor: "rgba(220,220,220,0.8)", highlightFill: "rgba(220,220,220,0.75)", highlightStroke: "rgba(220,220,220,1)", data: [20, 59, 80, 81, 56, 55, 40] } ] };


Puede llamar a esta función que genera colores aleatorios para cada barra

var randomColorGenerator = function () { return ''#'' + (Math.random().toString(16) + ''0000000'').slice(2, 8); }; var barChartData = { labels: ["001", "002", "003", "004", "005", "006", "007"], datasets: [ { label: "My First dataset", fillColor: randomColorGenerator(), strokeColor: randomColorGenerator(), highlightFill: randomColorGenerator(), highlightStroke: randomColorGenerator(), data: [20, 59, 80, 81, 56, 55, 40] } ] };


Si echa un vistazo a la biblioteca " ChartNew " que se basa en Chart.js, puede hacerlo pasando los valores como una matriz de la siguiente manera:

var data = { labels: ["Batman", "Iron Man", "Captain America", "Robin"], datasets: [ { label: "My First dataset", fillColor: ["rgba(220,220,220,0.5)", "navy", "red", "orange"], strokeColor: "rgba(220,220,220,0.8)", highlightFill: "rgba(220,220,220,0.75)", highlightStroke: "rgba(220,220,220,1)", data: [2000, 1500, 1750, 50] } ] };


Si no puede usar NewChart.js, solo necesita cambiar la forma de configurar el color usando una matriz. Encuentre la iteración auxiliar dentro de Chart.js:

Reemplace esta línea:

fillColor : dataset.fillColor,

Para este:

fillColor : dataset.fillColor[index],

El código resultante:

//Iterate through each of the datasets, and build this into a property of the chart helpers.each(data.datasets,function(dataset,datasetIndex){ var datasetObject = { label : dataset.label || null, fillColor : dataset.fillColor, strokeColor : dataset.strokeColor, bars : [] }; this.datasets.push(datasetObject); helpers.each(dataset.data,function(dataPoint,index){ //Add a new point for each piece of data, passing any required data to draw. datasetObject.bars.push(new this.BarClass({ value : dataPoint, label : data.labels[index], datasetLabel: dataset.label, strokeColor : dataset.strokeColor, //Replace this -> fillColor : dataset.fillColor, // Whith the following: fillColor : dataset.fillColor[index], highlightFill : dataset.highlightFill || dataset.fillColor, highlightStroke : dataset.highlightStroke || dataset.strokeColor })); },this); },this);

Y en tu js:

datasets: [ { label: "My First dataset", fillColor: ["rgba(205,64,64,0.5)", "rgba(220,220,220,0.5)", "rgba(24,178,235,0.5)", "rgba(220,220,220,0.5)"], strokeColor: "rgba(220,220,220,0.8)", highlightFill: "rgba(220,220,220,0.75)", highlightStroke: "rgba(220,220,220,1)", data: [2000, 1500, 1750, 50] } ]


Si sabe qué colores desea, puede especificar las propiedades de color en una matriz, de esta manera:

backgroundColor: [ ''rgba(75, 192, 192, 1)'', ... ], borderColor: [ ''rgba(75, 192, 192, 1)'', ... ],


Solución: llame al método de actualización para establecer nuevos valores:

var barChartData = { labels: ["January", "February", "March"], datasets: [ { label: "My First dataset", fillColor: "rgba(220,220,220,0.5)", strokeColor: "rgba(220,220,220,0.8)", highlightFill: "rgba(220,220,220,0.75)", highlightStroke: "rgba(220,220,220,1)", data: [20, 59, 80] } ] }; window.onload = function(){ var ctx = document.getElementById("mycanvas").getContext("2d"); window.myObjBar = new Chart(ctx).Bar(barChartData, { responsive : true }); //nuevos colores myObjBar.datasets[0].bars[0].fillColor = "green"; //bar 1 myObjBar.datasets[0].bars[1].fillColor = "orange"; //bar 2 myObjBar.datasets[0].bars[2].fillColor = "red"; //bar 3 myObjBar.update(); }


Tomando la otra respuesta, aquí hay una solución rápida si desea obtener una lista con colores aleatorios para cada barra:

function getRandomColor(n) { var letters = ''0123456789ABCDEF''.split(''''); var color = ''#''; var colors = []; for(var j = 0; j < n; j++){ for (var i = 0; i < 6; i++ ) { color += letters[Math.floor(Math.random() * 16)]; } colors.push(color); color = ''#''; } return colors; }

Ahora podría usar esta función en el campo backgroundColor en los datos:

data: { labels: count[0], datasets: [{ label: ''Registros en BDs'', data: count[1], backgroundColor: getRandomColor(count[1].length) }] }


así es como traté: empujé una matriz de "colores", con el mismo número de entradas que número de datos. Para esto, agregué una función "getRandomColor" al final del script. Espero eso ayude...

for (var i in arr) { customers.push(arr[i].customer); nb_cases.push(arr[i].nb_cases); colors.push(getRandomColor()); } window.onload = function() { var config = { type: ''pie'', data: { labels: customers, datasets: [{ label: "Nomber of cases by customers", data: nb_cases, fill: true, backgroundColor: colors }] }, options: { responsive: true, title: { display: true, text: "Cases by customers" }, } }; var ctx = document.getElementById("canvas").getContext("2d"); window.myLine = new Chart(ctx, config); }; function getRandomColor() { var letters = ''0123456789ABCDEF''.split(''''); var color = ''#''; for (var i = 0; i < 6; i++) { color += letters[Math.floor(Math.random() * 16)]; } return color; }


prueba esto :

function getChartJs() { **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 + ")"; }** $.ajax({ type: "POST", url: "ADMIN_DEFAULT.aspx/GetChartByJenisKerusakan", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (r) { var labels = r.d[0]; var series1 = r.d[1]; var data = { labels: r.d[0], datasets: [ { label: "My First dataset", data: series1, strokeColor: "#77a8a8", pointColor: "#eca1a6" } ] }; var ctx = $("#bar_chart").get(0).getContext(''2d''); ctx.canvas.height = 300; ctx.canvas.width = 500; var lineChart = new Chart(ctx).Bar(data, { bezierCurve: false, title: { display: true, text: "ProductWise Sales Count" }, responsive: true, maintainAspectRatio: true }); $.each(r.d, function (key, value) { **lineChart.datasets[0].bars[key].fillColor = dynamicColors(); lineChart.datasets[0].bars[key].fillColor = dynamicColors();** lineChart.update(); }); }, failure: function (r) { alert(r.d); }, error: function (r) { alert(r.d); } }); }