Jquery 如何开始和结束动态生成的datetime highchart';在第一个和最后一个刻度上的X轴

Jquery 如何开始和结束动态生成的datetime highchart';在第一个和最后一个刻度上的X轴,jquery,highcharts,Jquery,Highcharts,我有几个不同的高度图表,它们都可以在什么日期、什么时间开始和停止,所以硬编码的解决方案不起作用 我试图实现的是让xAxis标签从第一个数据点的datetime开始,到最后一个数据点的datetime结束 highchart允许我做的就是这样的事情 xAxis: { startOnTick: true, endOnTick: true, showFirstLabel: true, showLastLabel: true } 这仅仅意

我有几个不同的高度图表,它们都可以在什么日期、什么时间开始和停止,所以硬编码的解决方案不起作用

我试图实现的是让xAxis标签从第一个数据点的datetime开始,到最后一个数据点的datetime结束

highchart允许我做的就是这样的事情

xAxis: {
        startOnTick: true,
        endOnTick: true,
        showFirstLabel: true,
        showLastLabel: true
}
这仅仅意味着xAxis本身在一个刻度上开始和结束,而不一定是数据的第一个和最后一个刻度。它还在图表的左右两侧显示一个较大的填充/空格,以确保xAxis可以在一个刻度上开始和结束,但正如我所说的,这些规则不考虑系列内容,只需在图表自行计算的任何刻度间隔上开始和结束

理想情况下,具有“2017年1月1日”至“2017年2月20日”数据的图表应具有标签,标签上的日期为1月1日,结束日期为2月20日

相反,图表可能从1月5日开始,到2月15日结束。我认为这是为了给标签留出垂直空间


我想也许可以测量数据长度,计算出一个完美的步长,以便显示第一个和最后一个日期

在morganfree的帮助下,我找到了如何计算一组刻度位置,从而为您提供图表中的第一个和最后一个刻度数据

在我的解决方案中,我使用moment.js获取毫秒值,因为我手头有它

        tickPositioner: function () {
            const tiPo = [];
            const range = this.dataMax - this.dataMin;
            const steps = Math.floor(this.width / 40) //40 is the the pixel distance you want bewtween ticks
            const mpi = range / steps //milisec per interval
            for (var i = 0; i < steps; i++) {
                tiPo.push(moment(this.dataMin + (mpi * i)).startOf("day").valueOf())
            }
            tiPo.push(this.dataMax)
            tiPo.info = this.tickPositions.info
            return tiPo
        },
        endOnTick: false,
定位器:功能(){
常数tiPo=[];
常量范围=this.dataMax-this.dataMin;
const steps=Math.floor(this.width/40)//40是在刻度之间想要的像素距离
常数mpi=范围/步长//毫秒/间隔
对于(变量i=0;i

我还发现,将
enOnTick
设置为
false
有助于让图表自动设置右侧的距离,这样最后一个标签就不会溢出或太靠近图表的边缘(如果图表周围有边框或其他东西)

你能举一个实例说明这个问题吗?你的出发点可以是这把小提琴,你也可以尝试使用tickPositioner/tickPositions@morganfree,小提琴实际上已经证明了我的问题!如果缩小“结果”窗口,使图表水平压缩,您将看到唯一可用的刻度为1。2月8日。2月,而不是2月1日和12日。二月是图表中的最后一个日期。同样的事情也发生在我的图表中。我的图表并不像你制作这个图表那样小,但是它们包含了大量的数据,我怀疑这是导致问题的原因。理想情况下,我会看到第一个和最后一个,加上足够多的刻度,使图表可读使用刻度定位器在轴上动态设置刻度-您如何定位刻度的逻辑取决于您-您可以添加一些碰撞检测以防止标签重叠-最后两个刻度标签可能会相互碰撞这看起来将使我朝着正确的方向,多谢各位