Boxplot

Boxplot (ящик с усами, box-and-whisker plot) — это статистическая диаграмма, которая отображает распределение числовых данных по группам (категориям) через ключевые показатели: минимум, квартиль 1 (Q1), медиану, квартиль 3 (Q3) и максимум. Boxplot наглядно показывает вариативность и разброс данных, выявляет выбросы и асимметрию распределения.

Области применения:

Анализ распределения значений внутри категорий (например, прибыли по годам, зарплат по отделам) Выявление выбросов, оценка симметрии и диапазона Сравнение вариативности между группами

Как работает:

Для каждой категории (например, год, отдел) строится отдельный ящик. Центральная линия — медиана (Q2/50-й перцентиль). Границы ящика — первый (Q1/25%) и третий (Q3/75%) квартиль. «Усы» — линии к минимуму и максимуму наблюдений (без выбросов). Отдельно могут отображаться выбросы (выходящие за пределы основной выборки).

Структура данных для ECharts:

Для каждой категории необходим массив из пяти значений: [min, Q1, median, Q3, max]. Категории (например, года, отделы) задаются на оси X.

Оператор данных:

javascript
function dataCal(originData) {
  var dataModels = originData.dataModels;
  var colData = dataModels[0].colData;
  var data = [];
  for (var i = 0; i < colData[0].length; i++) {
    data[i] = {
      year: colData[0][i],
      min: colData[2][i],
      q1: colData[3][i],
      median: colData[4][i],
      q3: colData[5][i],
      max: colData[6][i]
    };
  }
  return data;
}

Оператор конфигураций:

javascript
function optionCal(data, chartConfig, chart) {
  var years = data.map(function(item) { return item.year; });

  // Для boxplot: [min, q1, median, q3, max] для каждого года
  var boxData = data.map(function(item) {
    return [
      Number(item.min),
      Number(item.q1),
      Number(item.median),
      Number(item.q3),
      Number(item.max)
    ];
  });

  var option = {
    title: { text: "Boxplot Chart Example", left: "center" },
    tooltip: { trigger: "item" },
    xAxis: { type: 'category', data: years },
    yAxis: { type: 'value' },
    series: [{
      name: 'Ящик с усами',
      type: 'boxplot',
      data: boxData
    }]
  };
  return option;
}