Считайте, что у меня нет доступа к коду создания диаграммы , поскольку это расширение для браузера.
Следующий код работает только для «простых» последовательных диаграмм
const chart = AmCharts.charts[0];
chat.dataProvider.forEach(data => data['_fillColor_'] = getRandomColor());
chart.validateData();
Но если я сделаю то же самое на диаграмме с сгруппированными данными, она, как ожидается, будет окрашивать каждую группу одним цветом вместо каждой категории группы.
Я придумал такой «взлом», что, когда данные диаграммы группируются, они вместо этого непосредственно окрашивают свои графики вместо изменения цветов dataProvider.
chart.graphs.forEach( graph => {
const color = getRandomColor()
graph.fillColors = color;
graph.bulletColor = color;
})
Это работает, но, может быть, есть более API-подобный способ сделать это? Это кажется очень хакерским, и может случиться так, что он потерпит неудачу.
Но есть еще одна проблема: как определить, что AmSerialChart хранит свои данные в группах? Я также использовал очень «хакерский» способ, который, вероятно, не будет работать во всех случаях.
В конце, вот код, я ищу способы сделать это менее хакерским:
//If valueFields length is 1 means the data isn't grouped
if(chart.dataProvider[0]['_valueFields_'].length == 1){
chart.dataProvider.forEach( data => data['_fillColor_'] = getRandomColor());
}else{
chart.graphs.forEach( (graph, i) => {
const color = getRandomColor()
graph.fillColors = color;
graph.bulletColor = color;
})
}