Я разрабатываю проект с использованием библиотеки Highstock.js.Мне нужно отобразить пустое пространство (скажем, равное 1 дню (86400000 мс) по оси x) от самых левых и правых частей диаграммы, которые будут видны только во время панорамирования на самые левые или правые (https://prnt.sc/lyqshz). I)не нужно устанавливать поля графика (https://api.highcharts.com/highstock/chart.margin). Я пытался решить эту проблему, установив 'min' и 'max' для xAxis как:
xAxis: {
min: ohlc[0].x - ONE_DAY_MS,
max: ohlc[ohlc.length - 1].x + ONE_DAY_MS,
},
, но это не сработало. ПожалуйстаПосоветуйте, если это возможно, и как это можно сделать. Спасибо!
Вот полный пример кода:
var ohlc = JSON.parse(ohlcStringified),
volume = JSON.parse(volumeStringified);
var ONE_DAY_MS = 24 * 60 * 60 * 1000;
var chart = Highcharts.stockChart('container', {
chart: {
borderWidth: 1,
panning: true,
},
title: {
text: 'Chart'
},
legend: {
enabled: true
},
rangeSelector: {
selected: 1,
enabled: false
},
navigator: {
enabled: false,
height: 0
},
scrollbar: {
enabled: false
},
xAxis: {
min: ohlc[0].x - ONE_DAY_MS,
max: ohlc[ohlc.length - 1].x + ONE_DAY_MS,
},
yAxis: [{
height: '60%'
}, {
top: '60%',
height: '40%',
offset: 0
}],
series: [{
type: 'candlestick',
id: 'candlestick',
name: 'AAPL',
data: ohlc,
tooltip: {
valueDecimals: 2
},
dataGrouping: {
enabled: false,
}
}, {
type: 'column',
id: 'volume',
name: 'Volume',
data: volume,
yAxis: 1,
dataGrouping: {
enabled: false,
}
}]
});
function chartZoomIn(chart) {
var min = chart.xAxis[0].getExtremes().min;
var max = chart.xAxis[0].getExtremes().max;
var diff = max - min;
var step = 0.05 * diff;
var newMin = min + step;
var newMax = max - step;
chart.xAxis[0].setExtremes(newMin, newMax);
}
function chartZoomOut(chart) {
var min = chart.xAxis[0].getExtremes().min;
var max = chart.xAxis[0].getExtremes().max;
var candlestickXData = chart.get('candlestick').xData;
var zoomInMin = candlestickXData[0];
var zoomInMax = candlestickXData[candlestickXData.length - 1];
var diff = max - min;
var step = 0.05 * diff ;
var newMin = min - step;
var newMax = max + step;
if (newMin <= zoomInMin || newMax >= zoomInMax) {
chart.zoomOut();
} else {
chart.xAxis[0].setExtremes(newMin, newMax);
}
}
$('.zoom-in').click(function() {
chartZoomIn(chart);
})
$('.zoom-out').click(function() {
chartZoomOut(chart);
})
$('.full-zoom-out').click(function() {
chart.zoomOut();
})
Демонстрационная версия: http://jsfiddle.net/ogorobets/82adzfhL/25/
Обновление 1:
Для xAxis есть опция 'overscroll' (https://api.highcharts.com/highstock/xAxis.overscroll).). Позволяет отображать пустое пространство в правой части графика.Не понятно, как реализовать такое же поведение для случая, когда пользователь перемещается по левому краю диаграммы. Я попытался решить последнюю проблему, установив параметр minPadding равным 0,2, но это не решило проблему.
xAxis: {
minPadding: 0.2,
overscroll: 60 * 60 * 1000
},
Вот живая демоверсия: http://jsfiddle.net/ogorobets/82adzfhL/33/