我在一张图上有2个系列。一次只能显示一个系列,但隐藏的图形会影响x轴上的范围。
数据是通过PHP动态生成的,但这里有2个小提示来表示我的意思:
Fiddle With Changed Scale and Hidden Data
Fiddle With removed Hidden Data and correct scale
此代码段旨在确保在任何给定时间只能显示一个系列。
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的最后一个数据点
答案 0 :(得分:3)
似乎Highcharts正在考虑具有最大pointRange
的系列的pointRange
(尽管它是隐藏的)并且基于此显示x轴。你的“通话/小时”系列的范围是1小时,因此它确保如果该系列在最后有一个点,它仍然有空间显示。
我不确定是否有任何优雅的解决方法,但在你的情况下,有点“黑客”是将所有系列的pointRange
更改为当前显示的系列。
我的粗略实现对您的代码进行了三处更改:
默认情况下,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();
}
}
扩展您的events.legendItemClick
功能,将所有系列pointRange
更新为点击完成后将会显示的系列文章:
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);
}
}
}
有关所有这些更改的结果,请参阅this updated JSFiddle。 编辑:jsFiddle更新错误