2025, Oct 31 18:46
Один boxplot для всей матрицы в pandas: как объединить всё в одно распределение
Как построить один boxplot для всей матрицы в pandas: преобразуйте DataFrame в один столбец с помощью stack() и получите единую сводку распределения данных.
Один boxplot для всей матрицы в pandas: как объединить всё в одно распределение
Это частая неожиданность: вы передаёте двумерный массив в pandas DataFrame и вызываете boxplot, рассчитывая получить единую сводку по всему набору данных, а вместо этого видите несколько «ящиков». Если цель — один boxplot, представляющий все значения матрицы сразу, есть простой способ добиться этого.
Постановка задачи
Следующий фрагмент создаёт матрицу 4×4, преобразует её в DataFrame и строит boxplot. В результате получаются четыре отдельных «ящика».
import numpy as npa
import pandas as pds
vals = npa.random.random(size=(4, 4))
frame = pds.DataFrame(vals)
frame.boxplot()Почему появляются несколько «ящиков»
Вы создаёте двумерные данные формы (4, 4). По умолчанию boxplot для DataFrame строит по одному «ящику» на столбец, поэтому таблица с четырьмя столбцами даёт четыре разных графика. Если же нужна одна диаграмма, суммирующая все 16 значений (4 × 4), данные нужно рассматривать как единый набор, а не как четыре отдельные колонки.
Решение
Чтобы получить один boxplot для всей матрицы, сначала преобразуйте DataFrame так, чтобы все значения стали одним столбцом. После этого вызов boxplot построит единственный «ящик», представляющий все 16 наблюдений.
import numpy as npa
import pandas as pds
vals = npa.random.random(size=(4, 4))
frame = pds.DataFrame(vals)
frame.stack().to_frame().boxplot()Этот шаг сворачивает 2D‑структуру в один столбец и строит график, в итоге вы получаете один «ящик» для всего датасета.
Зачем это нужно
Иногда важно сравнить столбцы, а иногда — получить единую сводку всех данных. Когда нужна одна совокупная выборка для матрицы, рассмотрение всех элементов как общего пула избавляет от разбиения по столбцам и позволяет сосредоточиться на общей картине.
Выводы
Если boxplot для DataFrame показывает несколько «ящиков», а вам нужен один, сделайте данные одномерными перед построением. Для матрицы эффективный способ — свернуть значения в один столбец; после этого boxplot отрисует единственный «ящик», который суммирует весь набор данных.
Статья основана на вопросе со StackOverflow от stefaniecg и ответе Panda Kim.