Highcharts rangeSelector无法识别日期、起止日期异常如何解决?
问题根因
- 你使用的
rangeSelector、navigator是Highstock专属组件,默认只支持datetime类型的X轴,你当前配置的是字符串分类X轴,组件无法直接识别分类值作为日期进行范围计算 - X轴
tickPositions配置错误:该参数要求传入轴的数值坐标,你传入的是字符串日期数组,不符合参数要求 - 序列
data格式错误:时间轴模式下要求每个数据点为[时间戳, 数值]结构,你当前传入的是仅包含数值的二维数组,没有绑定对应的时间坐标
修复方案
第一步:调整X轴类型为datetime,不要使用分类轴
将日期字符串批量转为毫秒级时间戳,直接作为X轴的坐标值,不需要额外配置分类项。
第二步:调整序列数据格式
每个数据点绑定对应的日期时间戳,保证组件能识别数据对应的时间位置。
第三步:删除错误的tickPositions配置,通过X轴的dateTimeLabelFormats自定义日期展示格式即可
修复后代码示例
$(document).ready(function() { // 把日期转为时间戳 var dateList = [ new Date('2010-12-30').getTime(), new Date('2011-03-31').getTime(), new Date('2011-06-30').getTime() ]; // 按时间正序排列数据,对应时间戳顺序 var data = [ [dateList[0], 56.6], [dateList[1], 46.3], [dateList[2], 32.8] ]; new Highcharts.Chart({ chart: { renderTo: 'container' }, title: { text: 'Sample' }, rangeSelector: { enabled: true, // 可以自定义范围按钮 buttons: [{ type: 'month', count: 3, text: '3月' }, { type: 'all', text: '全部' }] }, navigator: { enabled: true, series: { data: data } }, scrollbar: { enabled: true }, xAxis: { type: 'datetime', // 核心配置:指定为时间类型轴 reversed: true, minRange: 1 * 30 * 24 * 3600 * 1000, // 最小范围设为30天的毫秒值 dateTimeLabelFormats: { day: '%Y-%m-%d', month: '%Y-%m-%d' } }, yAxis: [{ // Primary yAxis labels: { format: '{value}', style: { color: Highcharts.getOptions().colors[1] } }, title: { text: 'AVERAGE CT_HOURS', style: { color: Highcharts.getOptions().colors[1] } } }], series: [{ name: 'Count', type: 'spline', data: data, tooltip: { xDateFormat: '%Y-%m-%d', valueSuffix: '' } }] }); });
额外说明
如果你的业务必须使用离散分类日期,不能用连续时间轴,就不能直接用Highstock的rangeSelector和navigator组件,需要自己基于分类索引实现自定义范围筛选功能,通过setExtremes方法手动控制X轴的显示范围。
内容的提问来源于stack exchange,提问作者Shivam Agrawal
相关产品推荐
相关产品推荐

