You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

billboard.js时间序列轴axis.x.extent设置默认子图表无效求助

解决billboard.js时间序列轴默认范围(extent)不生效的问题

问题核心是**axis.x.extent针对时间序列轴必须传入Date对象,而非字符串**。billboard.js的timeseries类型轴底层依赖Date实例计算范围,直接传递日期字符串无法被正确解析,所以设置后没有效果。

修复方案

  1. 将extent数组中的日期字符串转换为Date对象,或使用d3的时间解析工具生成标准时间对象
  2. 确保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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:04:54