В графиках на основе временных или измеряемых рядов часто встречаются
отсутствующие значения. В Chart.js такие разрывы формируются при
использовании null или undefined в наборе
данных. Поведение линии в этих местах определяется параметром
spanGaps.
В линейных графиках (type: 'line') данные обычно
задаются массивом:
data: [10, 15, null, 20, 25]
Значения null и undefined воспринимаются
как отсутствующие точки. Визуально это приводит к разрыву линии.
Важно различать:
null — явный пропуск значенияundefined — отсутствие значения в позицииNaN — некорректное числовое значение, также трактуется
как пропускChart.js при построении графика формирует сегменты линии между
доступными точками. При наличии пропусков поведение зависит от настройки
spanGaps.
spanGaps управляет тем, будет ли линия проходить через
пропущенные значения.
По умолчанию пропуски разрывают линию:
const config = {
type: 'line',
data: {
labels: ['A', 'B', 'C', 'D', 'E'],
datasets: [{
label: 'Продажи',
data: [12, 19, null, 25, 30],
spanGaps: false
}]
}
};
Результат:
19 и 25Такой режим применяется при необходимости строго отображать неполные данные без интерполяции.
При включении параметра линия соединяет соседние доступные точки:
const config = {
type: 'line',
data: {
labels: ['A', 'B', 'C', 'D', 'E'],
datasets: [{
label: 'Продажи',
data: [12, 19, null, 25, 30],
spanGaps: true
}]
}
};
Результат:
19 к 25Такое поведение используется при предположении, что данные непрерывны, а пропуски носят временный характер.
Параметр может задаваться глобально для всех датасетов:
const config = {
type: 'line',
options: {
spanGaps: true
}
};
При этом локальная настройка в dataset имеет приоритет над глобальной.
Приоритет применения:
dataset.spanGapsoptions.spanGapsfalse)При использовании временных шкал (type: 'time') пропуски
часто возникают из-за отсутствия измерений в конкретные моменты.
data: [
{ x: '2026-01-01', y: 10 },
{ x: '2026-01-02', y: null },
{ x: '2026-01-03', y: 15 }
]
При spanGaps: true линия соединяет 1 и 3 января
напрямую, игнорируя промежуточную точку.
Chart.js строит график из последовательности сегментов. Каждый разрыв формирует новый сегмент.
При spanGaps: false:
При spanGaps: true:
Каждый dataset может иметь собственное поведение:
datasets: [
{
label: 'Факт',
data: [10, null, 20, 30],
spanGaps: false
},
{
label: 'Тренд',
data: [12, 14, 16, 18],
spanGaps: true
}
]
В одном графике одновременно отображаются:
При использовании сглаживания:
tension: 0.4
spanGaps влияет только на наличие разрыва, но не
изменяет алгоритм кривой. При true кривая строится через
отсутствующие точки как через промежутки.
При наличии fill: true поведение следующее:
spanGaps: false заливка прерываетсяspanGaps: true заливка продолжается непрерывноПри анализе котировок пропуски часто означают отсутствие торгов в
конкретный период. Использование spanGaps: false сохраняет
корректность отображения.
При телеметрии пропуски часто кратковременны.
spanGaps: true позволяет визуализировать общий тренд без
визуальных разрывов.
При неполной выборке предпочтительно оставлять разрывы для сохранения честной интерпретации данных.
Chart.js считает пропусками:
nullundefinedNaNПримеры:
data: [10, NaN, 20]
data: [10, undefined, 20]
data: [10, null, 20]
Во всех случаях поведение spanGaps одинаково.
При больших наборах данных:
spanGaps: true уменьшает количество сегментовПри этом эффект зависит от количества разрывов и плотности точек.
При потоковом добавлении данных:
chart.data.datasets[0].data.push(newValue);
chart.update();
Если значения периодически отсутствуют, spanGaps
определяет, будет ли линия «рваться» при каждом пропуске или сохранять
непрерывность.
При комбинировании категориальных и временных осей пропуски интерпретируются одинаково, но визуальный эффект может различаться из-за неравномерного распределения точек.
Алгоритм Chart.js можно представить как последовательность:
Проверка значения точки
Если значение допустимо — добавление в сегмент
Если значение отсутствует:
spanGaps: true точка игнорируетсяspanGaps: false сегмент завершаетсяНачало нового сегмента при следующей валидной точке
Эта модель определяет итоговую геометрию линии на канвасе.