Javascript highcharts:在饼图中动态定义颜色
我试图根据每个系列的类型动态定义它们的颜色。 下面是我的代码,它不起作用,但显示了我正在尝试做什么。我想为某些类型定义颜色,例如:Javascript highcharts:在饼图中动态定义颜色,javascript,colors,highcharts,series,Javascript,Colors,Highcharts,Series,我试图根据每个系列的类型动态定义它们的颜色。 下面是我的代码,它不起作用,但显示了我正在尝试做什么。我想为某些类型定义颜色,例如: if type = 'IS' then color = '#FFCACA' 我不能期望ret会有所有类型,所以我需要知道在ret中返回哪些类型,然后将颜色关联到特定类型 怎么做 这是收到数据后的代码: success: function (ret) { $(function () { var chart; $(docu
if type = 'IS' then color = '#FFCACA'
我不能期望ret会有所有类型,所以我需要知道在ret中返回哪些类型,然后将颜色关联到特定类型
怎么做
这是收到数据后的代码:
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;
})()
}]
});
});
});
}
成功:功能(ret){
$(函数(){
var图;
$(文档).ready(函数(){
图表=新的高点图表。图表({
图表:{
renderTo:'divPie_uuu'+id,
plotBackgroundColor:null,
plotBorderWidth:null,
是的,
宽度:350,
身高:350
},
标题:{
文本:重新定义
},
工具提示:{
pointFormat:“{series.name}:{point.percentage}%”,
百分比小数:1
},
打印选项:{
馅饼:{
allowPointSelect:true,
光标:“指针”,
数据标签:{
已启用:false
},
showInLegend:对
}
},
系列:[{
键入“pie”,
名称:'当前选择',
颜色:(函数(){
开关(ret.type){
案例“AB”:返回“#C6F9D2”;
案例“BC”:返回“#ccb3”;
案例“CL”:返回“#ceceeff”;
案例“CI”:返回“#FFCAFF”;
案例“HB”:返回“D0CCCD”;
案例“ON”:返回“#FFCC99”;
案例“PM”:返回“#FFCBB9”;
案例“SR”:返回“#EAEC93”;
案例“TS”:返回“D7FBE6”;
案例“是”:返回“FFCACA”;
大小写“FREE”:返回“#00FF00”;
}
}),
数据:(函数(){
var-arr=[];
$(ret).每个(函数(){
var labelname=“”;
开关(此.type){
案例“AB”:labelname=“抗体”;断裂;
案例“BC”:labelname=“细菌”;断裂;
案例“CL”:labelname=“细胞系”;中断;
案例“CI”:labelname=“自定义项”;中断;
案例“HB”:labelname=“杂交瘤”;断裂;
案例“ON”:labelname=“寡核苷酸”;中断;
案例“PM”:labelname=“质粒”;中断;
案例“SR”:labelname=“siRNA”;中断;
案例“TS”:labelname=“组织样本”;断裂;
案例“是”:labelname=“隔离”;中断;
case“FREE”:labelname=“FREE space”;中断;
}
arr.push([labelname,this.cnt]);
})
返回arr;
})()
}]
});
});
});
}
这里的return
语句是从传递给每个函数的函数返回的,而不是从color函数返回的。此外,在JavaScript中也不需要使用开关情况
编辑:尝试以下方法
series: [{
type: 'pie',
name: 'Current selection',
color: {
'AB': '#C6F9D2',
'BC': '#CCCCB3',
'CL': '#CECEFF',
'CI': '#FFCAFF',
'HB': '#D0CCCD',
'ON': '#FFCC99',
'PM': '#FFCBB9',
'SR': '#EAEC93',
'TS': '#D7FBE6',
'IS': '#FFCACA',
'FREE': '#00FF00'
}[this.type]
}]
从您的代码中不太清楚什么是ret
,因此我不确定上面的代码是否有效,但它应该能让您大致了解如何做到这一点。我使用Highcharts而不提供任何颜色属性,因为它使用自己的库自动选择颜色。使用下面,希望它将为你工作
series: [{
type: 'pie',
name: 'Current selection',
data: [
['Name_1', 537],
['Name_2', 181],
['Name_3', 156]
]
}]
我们可以通过setOption函数
Highcharts.setOptions({
colors: ['#F64A16', '#0ECDFD', '#FFF000']
});
为什么不在将数据系列推送到图表时设置“颜色”属性?在看不到用于构建series对象的内容的情况下,我只能提供一些psuedo代码:
for each seriesItem in seriesList (
set highcharts.series[seriesItem].name = seriesList[seriesItem].seriesTitle
set highcharts.series[seriesItem].data = seriesList[seriesItem].data
set highcharts.series[seriesItem].Note = seriesList[seriesItem].extraInfo
set highcharts.series[seriesItem].color = switch (seriesList[seriesItem].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';
}
)
本质上,您需要预处理数据系列元素。有关显式格式,请参见问题。您可以设置系列的color
属性-您不必依赖于默认的HighCharts颜色列表或其他答案中描述的自定义颜色列表。请注意,color
属性未在HighCharts API中列出,但您可以使用它。对于饼图,您必须在数据中设置切片颜色
您必须使用点名称
而不是serie类型,serie类型将始终是“pie”
为此,您可以使用javascript对象表示法来存储每个系列的颜色。
使用开关比使用开关快
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']
}
]
}]
你可以看到它。但我必须为特定的['Name_1',537]定义特定的颜色。现在,颜色是随机定义的,这不适合我的情况。Shams I'v还编辑了问题,以便变得更清楚,问题是颜色属性并没有作为数据属性迭代。也许我的想法是错误的……如果不使用开关,映射速度会快上千万倍(这不是问题/解决方案的一部分)var colors={'AB':'C6F9D2','BC':'ccccccb3'}返回颜色[This.type]代码>你想做什么?您有一个饼图,因此系列类型将始终是pie
@RicardoAlvaroLohmann。。我们如何使用th