如何在 DateAxis AxisLabel 文本适配器中检索正确的日期?

How to retrieve correct date inside DateAxis AxisLabel text adapter?

我在尝试更改 AxisLabel 时无法获取正确的日期对象:

dateAxis.renderer.labels.template.adapter.add("text", function(text, target) {
  var date = target.dataItem.date, //Date Object "2020/01/01"
      labelText = text; // "Jul" for July
  return text;
});

这里,target.dataItem.date 给我一个日期对象,只有年份初始化,月份每次都设置为一月,而文本参数给我 "Jul" 七月。 为什么日期对象不正确?

**** 编辑 ****

这是我的问题的代码笔,它实际上发生在图表宽度太窄,因此 dateAxis 只显示年份时: https://codepen.io/XxSven/pen/rNadEPG

这大约是 "axis grid granularity"。让我解释一下。

您的数据跨越数年。这意味着 axis 需要显示几年的刻度。为了不被网格线和标签塞得太满,它直观地修改了其 grid/labels.

的粒度。

在你的情况下,它进入 "years" 模式,这意味着它每年显示一个网格 line/label。

现在显示 2011 年 1 月的标签没有意​​义,但显示 2013 年 7 月的标签。网格将以不规则的间隔排列,使用户完全偏离规模。

因此,在年模式下,轴显示每年的一月,因此您会看到。

你能做的就是控制这个粒度。它由轴渲染器的 minGridDistance 设置控制。基本上它是指网格线之间的最小距离。

数字越少,您的网格就越细化。

假设将其设为 10 像素:

dateAxis.renderer.minGridDistance = 10;

现在您将每 3 个月获得一次 grid/label。进一步降低这个数字,你可能会达到个别月份,但可能会面临过度拥挤。

最重要的是,标签适配器收到的 Date 对象不是数据中实际数据项的日期。这是网格线的日期 DateAxis 想要放置以描述其比例进展。

您可以阅读有关网格粒度的更多信息 here