考虑到我无法访问图表的创建代码,因为这是针对浏览器扩展的。
以下代码仅适用于“简单”序列图
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的方式可以做到这一点?这感觉很hacky,可能会失败。
但是还有另一个问题,如何识别AmSerialChart分组存储数据?我还最终使用了一种非常“ hacky”的方式,这种方式可能无法在所有情况下都起作用。
最后,这是代码,我正在寻找使这种代码变少的方法:
//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;
})
}