highcharts: dynamically define colors in pie chart
35,089
For a pie chart you have to set the slice color inside data
.
And you have to use the point name
and not serie type, serie type will always be "pie"
.
For this you can use javascript object notation to store which color each serie will have.
It's fastar than use a switch
.
var getColor = {
'AB': '#C6F9D2',
'BC': '#CCCCB3',
'CL': '#CECEFF',
'CI': '#FFCAFF',
'HB': '#D0CCCD',
'ON': '#FFCC99',
'PM': '#FFCBB9',
'SR': '#EAEC93',
'TS': '#D7FBE6',
'IS': '#FFCACA',
'FREE': '#00FF00'
};
series: [{
type: 'pie',
name: 'Current selection',
data: [
{
name: 'AB',
y: 45.0,
color: getColor['AB']
}, {
name: 'BC',
y: 26.8,
color: getColor['BC']
}, {
name: 'CL',
y: 12.8,
sliced: true,
selected: true,
color: getColor['CL']
}, {
name: 'CI',
y: 8.5,
color: getColor['CI']
}, {
name: 'HB',
y: 6.2,
color: getColor['HB']
}, {
name: 'ON',
y: 0.7,
color: getColor['ON']
}
]
}]
You can see it working here.
Comments
-
dllhell almost 2 years
I'm trying to dynamically define color for each seria depending of their type. Below is my code which doesn't work but showing what I'm trying to do. I would like to define colour for certain type eg:
if type = 'IS' then color = '#FFCACA'
I cannot expect that ret will have all types so I need to know which types are returned in ret and then asociate color to certain type.
How to do that?
this is code since data received:
success: function (ret) { $(function () { var chart; $(document).ready(function () { chart = new Highcharts.Chart({ chart: { renderTo: 'divPie_' + id, plotBackgroundColor: null, plotBorderWidth: null, plotShadow: true, width: 350, height: 350 }, title: { text: refrigname }, tooltip: { pointFormat: '{series.name}: <b>{point.percentage}%</b>', percentageDecimals: 1 }, plotOptions: { pie: { allowPointSelect: true, cursor: 'pointer', dataLabels: { enabled: false }, showInLegend: true } }, series: [{ type: 'pie', name: 'Current selection', color: (function () { switch (ret.type) { case 'AB': return '#C6F9D2'; case 'BC': return '#CCCCB3'; case 'CL': return '#CECEFF'; case 'CI': return '#FFCAFF'; case 'HB': return '#D0CCCD'; case 'ON': return '#FFCC99'; case 'PM': return '#FFCBB9'; case 'SR': return '#EAEC93'; case 'TS': return '#D7FBE6'; case 'IS': return '#FFCACA'; case 'FREE': return '#00FF00'; } }), data: (function () { var arr = []; $(ret).each(function () { var labelname = ""; switch (this.type) { case "AB": labelname = "Antibodies"; break; case "BC": labelname = "Bacteria"; break; case "CL": labelname = "Cell lines"; break; case "CI": labelname = "Custom items"; break; case "HB": labelname = "Hybridoma"; break; case "ON": labelname = "Oligonucleotides"; break; case "PM": labelname = "Plasmids"; break; case "SR": labelname = "siRNA"; break; case "TS": labelname = "Tissue samples"; break; case "IS": labelname = "Isolates"; break; case "FREE": labelname = "Free space"; break; } arr.push([labelname, this.cnt]); }) return arr; })() }] }); }); }); }
-
dllhell over 11 yearsbut I HAVE TO to define specific color for particular ['Name_1', 537]. Now, colors are defined randomly which is inappropriate for my situation.
-
dllhell over 11 yearsShams I'v also edited questions in order to become more clear, problem is that color property is not iterated as data property. Maybe I'm thinking in wrong way...
-
coolDude about 8 years@RicardoAlvaroLohmann .. how can we use this if we are getting data dynamically from mysql in JSON format ? series: [{ type: 'pie', name: 'Execution Summary', data:[] }] }; function getAjaxData(id) { $.getJSON("data/pie.php", {id: id}, function(json) { options.series[0].data = json; chart = new Highcharts.Chart(options); }); }