angular - Highcharts - 每个切片的饼图颜色
问题描述
我有一个带有高图的角度应用程序,在饼图的情况下,我有一个用于每个切片的颜色列表。我限制馅饼只有 10 片。我需要在切片上按从最大到最小的顺序添加一些颜色。
这是饼图配置:
pieChartOptions = {
chart: {
type: "pie"
},
title: {
enabled: true,
text: this.xAxis.name + " by Daypart",
verticalAlign: "top",
align: "left"
},
credits: {
enabled: false
},
xAxis: {
title: {
text: this.xAxis.name
}
},
yAxis: {
title: {
text: "Reach"
}
},
series: [{
data: null,
colors: ["#205493", "#BE5873", "#81CACF", "#E98841", "#E3D830", "#A6C46F",
"#894C7B", "#BA9765", "#7F7F7F", "#C3C3C3"],
dataLabels: {
enabled: false
},
}]
};
该colors
数组应按从最大切片到最小切片的顺序排列。问题是我还有一个折线图,当悬停时,线会更新饼图,因此大小会动态变化。
这是饼图的数据设置:
loadCharts() {
let presentationResults: OptimizationAllocationGroupByTrps[] | OptimizationAllocationGroupByCost[] = [];
this.xAxis.name = this.selectedOption == null ? "TRP" : this.selectedOption;
if (this.selectedOption === "Budget") {
presentationResults = [...this.projectResults.OptimizationAllocationGroupByCost];
} else {
presentationResults = [...this.projectResults.OptimizationAllocationGroupByTRPs];
}
this.chartOptions.series[0].name = this.xAxis.name;
this.chartOptions.series[0].data = [];
this.chartOptions.series[0].data = [... this.projectResults.Curves.filter(x => x.Type === this.xAxis.name)[0].Points];
presentationResults.forEach((oa: OptimizationAllocationGroupByTrps | OptimizationAllocationGroupByCost) => {
if (oa.name.indexOf("%") === -1) {
oa.y = (Math.round(oa.y * 100) / 100);
oa.name = oa.name + ": " + oa.y + "%";
}
});
if (presentationResults.length > 10) {
let accumPercentage: number = 100;
presentationResults.sort((v1: any, v2: any) => v1.y > v2.y ? -1 : 1).length = 9;
presentationResults.forEach(updateResult => {
accumPercentage -= updateResult.y;
});
presentationResults.push({name: "Others: " + Math.round(((accumPercentage))) + "%", y: accumPercentage});
}
this.pieChartOptions.series[0].data = presentationResults;
this.pieChartOptionsBig.series[0].data = presentationResults;
console.log(this.pieChartOptions.series[0].data);
this.chartOptions.xAxis.title.text = this.xAxis.name;
this.chartOptions.title.text = "Reach +1/" + this.xAxis.name;
this.pieChartOptions.title.text = this.xAxis.name + " by Daypart";
this.pieChartOptionsBig.title.text = this.xAxis.name + " by Daypart";
this.chartOptions = {... this.chartOptions };
this.pieChartOptions = {... this.pieChartOptions };
this.pieChartOptionsBig = {... this.pieChartOptionsBig };
}
这是图表的示例:
在此示例中,橙色切片应为"#205493"
颜色数组中的第一项。
关于如何实现这一目标的任何想法?
解决方案
您可以直接在一个点上设置颜色并动态更新它。
series: [{
type: 'pie',
data: [
{ y: 20, color: 'red'},
{ y: 20, color: 'blue'},
{ y: 20, color: 'orange'}
]
}]
现场示例:http: //jsfiddle.net/BlackLabel/6m4e8x0y/4899/
API参考:
https://api.highcharts.com/highcharts/series.pie.data.color
https://api.highcharts.com/class-reference/Highcharts.Point#update
推荐阅读
- c# - 防止从数组c#中删除条目
- ionic-framework - 如何修复 Android 和 iOS 设备上不同的离子标签图标显示?
- python - np.array 到 python 中的函数 - 'list' 对象不可调用
- azure - 如何使用 Azure Pipelines 为 kubernetes(在同一节点和横向扩展)设置自动缩放?
- typescript - Angular:错误类型错误:无法设置未定义的属性“名称”
- nlp - word2vec 如何查找句子相似度?
- udp - 使用snmp广播发现打印机可以吗
- reactjs - 我应该使用 react-loadable 还是 loadable-components 进行代码拆分?
- java - 多色边缘绘制油漆变压器
- javascript - 如何在angularjs中重新加载指令数据?