关于AnyChart Stock中X轴使用Julian date(儒略日期)的技术咨询
在AnyChart Stock中使用儒略日期(Julian Date)
完全可以在AnyChart Stock中实现X轴的儒略日期格式显示,核心是两步:将儒略日期转换为图表可识别的Date对象,再自定义X轴格式化函数将Date转回儒略日期展示。
步骤1:实现儒略日期与Date对象的互转函数
首先需要编写两个工具函数,分别用于把儒略日期转换为JavaScript的Date对象,以及把Date对象转回儒略日期:
// 儒略日期转Date对象 function julianToDate(jd) { const a = Math.floor(jd + 0.5); const b = a + 1537; const c = Math.floor((b - 122.1) / 365.25); const d = Math.floor(365.25 * c); const e = Math.floor((b - d) / 30.6001); const day = b - d - Math.floor(30.6001 * e); const month = e < 14 ? e - 1 : e - 13; const year = month > 2 ? c - 4716 : c - 4715; return new Date(year, month - 1, day); } // Date对象转儒略日期 function dateToJulian(date) { const year = date.getFullYear(); const month = date.getMonth() + 1; const day = date.getDate(); if (month < 3) { year--; month += 12; } const a = Math.floor(year / 100); const b = 2 - a + Math.floor(a / 4); return Math.floor(365.25 * (year + 4716)) + Math.floor(30.6001 * (month + 1)) + day + b - 1524.5; }
步骤2:处理图表数据
把你的儒略日期数据通过julianToDate转换为Date对象,供AnyChart Stock识别:
// 示例数据:[儒略日期, 股价] const rawData = [ [2459900.5, 150], [2459901.5, 152], [2459902.5, 148], // 更多数据... ]; // 转换为图表可接受的格式:[Date, 数值] const chartData = rawData.map(item => [julianToDate(item[0]), item[1]]);
步骤3:配置X轴的儒略日期格式化
在图表配置中,指定X轴的标签格式化函数,调用dateToJulian把Date对象转回儒略日期显示:
// 初始化股票图表 anychart.onDocumentReady(function() { const chart = anychart.stock(); const plot = chart.plot(0); // 添加数据系列 const series = plot.line(chartData); series.name('股票价格'); // 配置X轴标签格式 chart.xAxis().labels().format(function() { // 将当前轴的Date值转为儒略日期,保留1位小数 return dateToJulian(this.value).toFixed(1); }); // 渲染图表 chart.container('container'); chart.draw(); });
常见问题排查
如果之前自定义格式化失败,大概率是这两个原因:
- 没有先把儒略日期转换为
Date对象,图表无法识别原始儒略数值为时间轴数据 - 格式化函数中没有正确处理
this.value(AnyChart格式化函数中this.value对应轴的原始值,这里是Date对象)
内容的提问来源于stack exchange,提问作者pk825
相关产品推荐
相关产品推荐

