AmCharts 3 - Как динамически изменять цвета последовательной диаграммы, данные которой группируются? - PullRequest
0 голосов
/ 04 апреля 2019

Считайте, что у меня нет доступа к коду создания диаграммы , поскольку это расширение для браузера.

Следующий код работает только для «простых» последовательных диаграмм

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;
    })
}
...