Highcharts:在绘制多个系列时删除额外的边距 y 轴

Highcharts: Remove extra margin y-axis when plotting multiple series

我有一个包含两个不同日期时间系列的图表,第一个系列是线性的并且包含月度值,而第二个系列是列系列并且每年只包含一个值。

当我在一个图表中显示两个系列时(一个 x-axis [日期时间],两个 y-axes),第一个图不是绘制在左侧,而是在 y 轴上填充(see example here).

series: [{
        name: 'Monthly',
        type: 'line',
        yAxis: 0,
        data: [
            [Date.UTC(2012, 0, 31), 11],
            [Date.UTC(2012, 1, 28), 12],
            [Date.UTC(2012, 2, 31), 13],
            (...etc...)
            [Date.UTC(2014, 9, 31), 22],
            [Date.UTC(2014, 10, 30), 21],
            [Date.UTC(2014, 11, 31), 20]
        ]
    }, {
        name: 'Yearly',
        type: 'column',
        yAxis: 1,
        data: [
            [Date.UTC(2012, 5, 30), 16],
            [Date.UTC(2013, 5, 30), 17],
            [Date.UTC(2014, 5, 30), 18]
        ]
    }]

如果我只在图表中放置线性序列 (like this),则图表会很好地放在图表的左右两端。这也是我想为 linear/column 组合实现的目标。

有人可以帮忙吗? 提前致谢。

出现此问题是因为您的第二个系列 'Yearly' 的数据点在 年中 。 Highcharts 总是首先计算不同系列的间隔。因此,在您的情况下,它会根据第二个系列的间隔(以年为单位)缩放 x 轴:

        [Date.UTC(2012, 5, 30), 16],   
        [Date.UTC(2013, 5, 30), 17],   // year after last datapoint
        [Date.UTC(2014, 5, 30), 18]    // year after last datapoint

然后,它会尝试将x轴起点放在这样一个数据点:Date.UTC(2012, 5, 30)(最好是第一个)。唯一的问题是:您的 first 系列开始于 before 此数据点,并且其数据点之间的间隔 smaller 。然后 highcharts 所做的是选择 最大 间隔(在您的情况下为年),然后尝试找到低于最低数据点的间隔。

因此对于您的情况是:

Date.UTC(2012, 0, 31) - a year
(lowest datapoint)     (largest interval)

x轴上限同理

我找到了一种计算此差异并对其进行补偿的方法:

var begin        = Date.UTC(2012, 0, 31);     // the earliest/first time of both series
var end          = Date.UTC(2014, 11, 31);    // the latest/last time of both series
var beginLargest = Date.UTC(2012, 5, 30);     // the first time of the series with the
                                              // .. largest interval between datapoints
var endLargest   = Date.UTC(2014, 5, 30);     // the last time of the series with the
                                              // .. largest interval between datapoints

var yearRange    = (end - begin)/(365*60*60*24*1000);
var yearBegExtra = (beginLargest - begin)/(365*60*60*24*1000);
var yearEndExtra = (endLargest - end)/(365*60*60*24*1000); 
var marginBegin  = yearBegExtra / yearRange;
var marginEnd    = yearEndExtra / yearRange;

现在我们可以补偿这个额外的保证金如下:

xAxis: {
    type: 'datetime',
    minPadding: -marginBegin + 0.005,    // +0.005 to give a little extra padding
    maxPadding: marginEnd    + 0.005    // .. which allows to see the ticks 2012 & 2015
}, ..

这给出了预期的图表。

DEMO