highcharts x-axis 1年显示年份+1的刻度/标签

时间:2014-08-14 05:41:10

标签: highcharts

我有一个带有x轴一整年的​​高图柱形图。其类型为datetime,其min / max为2014-01-01至2014-12-31。

为什么显示Jan 2015 的刻度/标签?

http://jsfiddle.net/nkjm2691/1/

的完整来源

我尝试了很多方法,例如将结束日期设置为Date.UTC(2014, 11, 31, 23, 59, 59)并尝试tickInterval。我最终需要的是每月刻度(即不规则间隔),标签位于刻度之间。如果图表具有固定宽度,则仅使用某些伏都教逻辑来计算偏移量。

相当令人惊讶的是,使用areaspline类型的图表或多或少地做同样的工作正常:http://jsfiddle.net/fm86v8fe/

我还检查了一些相关的SO问题,例如Is there a reliable way to have a 1 month auto generated tick interval with high charts?HighCharts xAxis - tickInterval for month,但它们并没有解决我的问题。

2 个答案:

答案 0 :(得分:2)

您发布了this JSFiddle。只需从type: 'column'更改为type: 'line'即可删除标签。为什么呢?

这是因为“像列一样”的任何图表类型都有pointRange。这取决于上下文的不同定义,但对于datetime x轴,它是(API):

  

在线性和日期时间轴上,范围将计算为两个最接近的数据点之间的距离。

这个pointRange会导致您的列具有特定的宽度。它们跨越x轴。正如您在图表中看到的那样,每列的范围都是一周,而不仅仅是一毫秒(对于折线图来说就是这种情况,类似)。

根据我的理解,这会导致Highcharts占用一些额外的空间,以某种方式更好地适应图表点的点范围。

你可以做几件事。您可以像这样手动覆盖pointRange

series: { pointRange: 1, data: ... }

这将使每列仅厚1毫秒,并删除标签。您可以使用pointWidth修正宽度:

series: { pointRange: 1, pointWidth: 10, data: ... }

但请注意,这是静态的,因此如果列突然变得太近,它们将开始重叠。 Here's a JSFiddle demonstration

此外,您无法做任何事情,只需将max设置得足够长,以便pointRange不要包含太多额外空间,例如:

xAxis: { min : Date.UTC(2014, 0, 1), max : Date.UTC(2014, 11, 28) }

请注意,一旦你回到12月29日,Highcharts似乎会增加更多的空间。不幸的是,我不确定如何选择这个间距(第29个星期一......?)。

塞巴斯蒂安提出了一些根本不涉及这种操纵的解决方案。选择的“解决方案”取决于图表的其他要求和期望的行为。

答案 1 :(得分:1)

将最大日期设置为1.12,删除时间并将maxPadding设置为0值。如果您使用tiem(23:59:59),则无法正确计算Interval。第二种解决方案是使用tickPositioner

https://jsfiddle.net/nkjm2691/50/