我有一个带有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,但它们并没有解决我的问题。
答案 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