将plotbond添加到Highcharts中由GapSize定义的间隙

zfycwa2u  于 2022-11-10  发布在  Highcharts
关注(0)|答案(1)|浏览(111)

我尝试为数据中的间隙添加背景颜色,以便在较大间隔时更明显。我知道可以通过添加具有所需颜色的plotbonds来实现此操作,但问题是我没有差距的开始和结束,因为它是通过定义GapSize和GapUnit创建的(没有包含空数据的日期,只是日期中的间隙)。我试着通过计算日期之间的差异并将其与tickInterval进行比较来添加plotbonds,但到目前为止没有成功,
以下是使用gapsize设置间隙的示例

plotOptions: {
        series: {
            gapSize: 1
        }
    }

https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/stock/plotoptions/series-gapsize
有没有更简单的方法?
谢谢

rqcrx0a6

rqcrx0a61#

Highcharts在内部添加空点以创建间隔。您可以获得计算的空点,并基于它们的值创建图带。
例如:

let plotBands = [];
let allowChartUpdate = true;

(function(H) {
    H.wrap(H.seriesTypes.area.prototype, 'getGraphPath', function(proceed, points) {
        const xAxis = this.xAxis;
        plotBands = [];

        points.forEach((p, index) => {
            if (p.isNull) {
                plotBands.push({
                    from: points[index - 1] ? points[index-1].x : xAxis.min,
                    to: points[index + 1] ? points[index+1].x : xAxis.max,
                    color: 'red'
                });
            }
        });

        return proceed.apply(this, Array.prototype.slice.call(arguments, 1));
    });
}(Highcharts));

Highcharts.stockChart('container', {
    chart: {
        type: 'area',
        events: {
            render: function() {
                // prevent infinity loop
                if (allowChartUpdate) {
                    allowChartUpdate = false;
                    this.xAxis[0].update({plotBands});
                    allowChartUpdate = true;
                }
            }
        }
    },
    ...
});

现场演示:https://jsfiddle.net/BlackLabel/jz0n28om/
API引用:https://api.highcharts.com/highcharts/xAxis.plotBands
文件:https://www.highcharts.com/docs/extending-highcharts/extending-highcharts

相关问题