次のようなカラーグラデーションを取得しようとしています:値0 =緑、値20 =黄色、値40=赤。したがって、実際のデータの最大値が20を超えるかどうかに応じて、2または3ストップの線形勾配を使用しています。これが、線形勾配をHSLタイプの色空間内を移動させる唯一の方法です。それは素晴らしい働きをします。問題は、ズームすると、線形勾配が潜在的に小さいスケールに再適用されることです。可能なズームシナリオで、黄色を常に値20の中心に配置したいと思います。これで、ズームすると、黄色がはるかに小さい値の中心にくる場合があります。これを達成する方法はありますか?ズームが発生するたびにグラデーションを変更する必要がありますか?コードは次のとおりです。
var data=env.client.data;
var selected=env.client.selected;
var max=_.max(data,function(slice){
return(slice[1]);
})[1];
if(max>0){
var stops=[
[0,'hsla(120,50%,50%,0.5)']
];
if(max>20){
stops.push([20/max,'hsla(60,50%,50%,0.5)']);
stops.push([1,'hsla('+Math.round(120-(120*(max/40)))+',50%,50%,0.5)']);
}else{
stops.push([1,'hsla('+Math.round(120-(60*(max/20)))+',50%,50%,0.5)']);
}
var chart=new Highcharts.Chart({
chart:{
height:250,
renderTo:'chart',
type:'areaspline',
width:960,
zoomType:'x'
},
legend:{
enabled:false
},
plotOptions:{
areaspline:{
animation:false,
fillColor:{
linearGradient:{
x1:0,
y1:1,
x2:0,
y2:0
},
stops:stops
},
lineColor:'black',
lineWidth:1,
marker:{
enabled:false,
states:{
hover:{
enabled:true,
radius:5
}
}
},
point:{
events:{
click:function(){
var point=moment(this.x).utc();
env.client.range.selected=point;
$('#client-datetime').val(point.format('YYYY MMM DD, HH:mm'));
_.publish('client date changed');
}
}
},
states:{
hover:{
lineWidth:1
}
}
}
},
series:[{
data:data,
name:'Clients'
}],
title:{
text:null
},
tooltip:{
animation:false
},
xAxis:{
maxZoom:12*60*60*1000,
title:{
text:null
},
type:'datetime'
},
yAxis:{
max:max,
min:0,
minTickInterval:1,
title:{
text:null
}
}
});
}else{
$('#chart').html('');
}