Javascript X轴范围根据隐藏序列进行更改
我在一个图上有两个系列。一次只能显示一个系列,但隐藏图形会影响x轴上的范围 数据是通过PHP动态生成的,但这里有两个小提琴来说明我的意思: 此代码段用于确保在任何给定时间只能显示一个系列Javascript X轴范围根据隐藏序列进行更改,javascript,jquery,highcharts,Javascript,Jquery,Highcharts,我在一个图上有两个系列。一次只能显示一个系列,但隐藏图形会影响x轴上的范围 数据是通过PHP动态生成的,但这里有两个小提琴来说明我的意思: 此代码段用于确保在任何给定时间只能显示一个系列 events: { show: function () { var chart = this.chart, series = chart.series, i = series.length, otherSerie
events: {
show: function () {
var chart = this.chart,
series = chart.series,
i = series.length,
otherSeries;
var seriesName = this['options']['name'];
chart.yAxis[0].axisTitle.attr({
text: seriesName
});
while (i--) {
otherSeries = series[i];
if (otherSeries != this && otherSeries.visible) {
otherSeries.hide();
}
}
}
我不知道为什么隐藏数据的图形显示到16:00,但没有任何附加数据的图形显示到15:38的最后一个数据点。Highcharts似乎考虑到了具有最大
点范围的系列的点范围(尽管它是隐藏的)并在此基础上显示x轴。您的“通话/小时”系列的范围是1小时,因此它可以确保如果该系列在最后有一个点,它仍然有显示的空间
我不确定是否有任何优雅的方法来解决这个问题,但在您的案例中,有一点“黑客”是将所有系列的点范围
更改为当前显示的系列
我的粗略实现对您的代码有三个更改:
默认情况下,visible:false
序列也会获得pointRange:1
,因此它们不会破坏唯一可见序列的x轴范围
创建图表后,我们存储每个系列的正确点范围以供将来参考,例如使用回调函数:
$('#callFrequencyGraph').highcharts({
// Options...
}, function(event) {
var series = this.series;
// Store the correct point ranges
for(var i = 0; i < series.length; i++) {
series[i].update({
historicalPointRange: (series[i].closestPointRange ? series[i].closestPointRange : 3600000)
}, false);
this.redraw();
}
}
有关所有这些更改的结果,请参见。
编辑:jsFiddle-updateforbug我很喜欢它,但它相当粗糙。我将等待另一个答案。如果没有一个合适的时间来,我会选择这是一个最好的答案。是的,希望有更优雅的东西。我想看看:)Ondkloss的答案是正确的,你应该使用pointRange(60000)。错误:属性x=“NaN”highcharts的值无效。js:54
错误:属性width=“NaN”highcharts的值无效。js:54
当我每小时historicalPointRange:(系列[I]上只有一个点时会发生错误.ClosesPointRange?系列[i].ClosesPointRange:3600000)
看起来最好,因为它填充了图表,如果只有一个点,它通常会填充图表(我的JSON会在30秒后修复此问题,因此我可以在JSON之后看到点范围。)
legendItemClick: function() {
if(this.visible){
return false;
}
else {
var series = this.chart.series;
for(var i = 0; i < series.length; i++) {
series[i].update({
pointRange: this.options.historicalPointRange
}, false);
}
}
}