billboard.js时间序列轴axis.x.extent设置默认子图表无效求助
解决billboard.js时间序列轴默认范围(extent)不生效的问题
问题核心是**axis.x.extent针对时间序列轴必须传入Date对象,而非字符串**。billboard.js的timeseries类型轴底层依赖Date实例计算范围,直接传递日期字符串无法被正确解析,所以设置后没有效果。
修复方案
- 将
extent数组中的日期字符串转换为Date对象,或使用d3的时间解析工具生成标准时间对象 - 确保ESM环境下正确导入所需的功能模块(如
area、zoom)
修改后的完整代码
// base css import 'billboard.js/dist/theme/insight.css'; import bb, { area, zoom } from "billboard.js"; // ESM环境下正确导入模块 import * as d3 from 'd3'; // 匹配数据日期格式的解析器 const parseDate = d3.timeParse("%m-%d-%Y"); var chart = bb.generate({ data: { x: 'x', json: { Temperature: [ '29.39','29.7','29.37','28.87','28.62','27.72','27.61','27.82','27.48','26.78', '26.62','26.64','26.29','26.01','25.84','25.07','24.85','24.01','23.83','22.8', '23','22.64','22.77','22.64','22.64','22.62','22.51','21.42','21.18','20.93', '20.66','20.48','20.7','21.24','22.14','22.78','23.43','23.16','27.48','26.78', '26.62','26.64','26.29','26.01','25.84','25.07','24.85','24.01' ], x: [ '01-01-2015','02-01-2015','03-01-2015','04-01-2015','05-01-2015','06-01-2015', '07-01-2015','08-01-2015','09-01-2015','10-01-2015','11-01-2015','12-01-2015', '01-01-2016','02-01-2016','03-01-2016','04-01-2016','05-01-2016','06-01-2016', '07-01-2016','08-01-2016','09-01-2016','10-01-2016','11-01-2016','12-01-2016', '01-01-2017','02-01-2017','03-01-2017','04-01-2017','05-01-2017','06-01-2017', '07-01-2017','08-01-2017','09-01-2017','10-01-2017','11-01-2017','12-01-2017', '01-01-2018','02-01-2018','03-01-2018','04-01-2018','05-01-2018','06-01-2018', '07-01-2018','08-01-2018','09-01-2018','10-01-2018','11-01-2018','12-01-2018' ] }, type: area(), // ESM环境下使用函数形式 xFormat: '%m-%d-%Y', }, axis: { x: { tick: { fit: false, count: 5, }, type: 'timeseries', // 用解析后的Date对象设置显示范围 extent: [parseDate('12-01-2016'), parseDate('12-01-2018')] // 也可以直接用Date构造函数: // extent: [new Date('2016-12-01'), new Date('2018-12-01')] }, }, zoom: { enabled: zoom() // ESM环境下使用函数形式 }, tooltip: { format: { title: function (x) { return d3.timeFormat('%Y-%m-%d')(x); }, }, }, point: { focus: { only: true, }, }, bindto: '#xAxisTickTimeseries', });
针对1980-2024数据的动态范围设置
如果要自动显示最近10年数据,可以动态计算时间范围:
const endDate = new Date(); const startDate = new Date(endDate.getFullYear() - 10, endDate.getMonth(), endDate.getDate()); // 在axis.x.extent中使用: extent: [startDate, endDate]
内容的提问来源于stack exchange,提问作者Gaeguri
相关产品推荐
相关产品推荐

