Подтвердить что ты не робот

Коробки в matplotlib: маркеры и выбросы

У меня есть некоторые вопросы о boxplots в matplotlib:

Вопрос A. Что представляют собой отмеченные ниже метки с Q1, Q2 и Q3? Я считаю, что Q1 является максимальным, а Q3 - это выбросы, но что такое Q2?

                      enter image description here

Вопрос B. Как matplotlib идентифицирует выбросы? (то есть как он знает, что они не являются истинными значениями max и min?)

4b9b3361

Ответ 1

Картинка стоит тысячи слов. Обратите внимание, что выбросы (маркеры + на вашем графике) - это просто точки снаружи для расширенного поля [(Q1-1.5 IQR), (Q3+1.5 IQR)] ниже.

  enter image description here

Однако изображение является лишь примером для нормально распределенного набора данных. Важно понимать, что matplotlib сначала не оценивает нормальное распределение и вычисляет квартили из оцененных параметров распределения, как показано выше.

Вместо этого медиана и квартили вычисляются непосредственно из данных. Таким образом, ваш boxplot может выглядеть по-разному в зависимости от распределения ваших данных и размера образца, например, асимметричного и с более или менее выбросами.

Ответ 2

Ящик представляет первый и третий квартили, а красная линия - медиана (2-й квартиль). документация дает унции по умолчанию в 1,5 IQR:

boxplot(x, notch=False, sym='+', vert=True, whis=1.5,
        positions=None, widths=None, patch_artist=False,
        bootstrap=None, usermedians=None, conf_intervals=None)

и

whis: [по умолчанию 1.5]

Определяет длину усов как функцию внутреннего диапазона квартилей. Они распространяются на самую экстремальную точку данных внутри диапазона данных (whis * (75% -25%)).

Если вы запутались в разных представлениях в виде квадратов, попробуйте прочитать описание в wikipedia.

Ответ 3

В дополнение к seth-ответу (поскольку документация не очень точна в этом отношении): Q1 (wiskers) размещаются с максимальным значением ниже 75% + 1,5 IQR

(минимальное значение 25% - 1,5 IQR)

Это код, который вычисляет положение усов:

        # get high extreme
        iq = q3 - q1
        hi_val = q3 + whis * iq
        wisk_hi = np.compress(d <= hi_val, d)
        if len(wisk_hi) == 0 or np.max(wisk_hi) < q3:
            wisk_hi = q3
        else:
            wisk_hi = max(wisk_hi)

        # get low extreme
        lo_val = q1 - whis * iq
        wisk_lo = np.compress(d >= lo_val, d)
        if len(wisk_lo) == 0 or np.min(wisk_lo) > q1:
            wisk_lo = q1
        else:
            wisk_lo = min(wisk_lo)

Ответ 4

На всякий случай, это может принести пользу кому-либо еще, мне нужно было поставить легенду на одном из графиков диаграммы коробки, поэтому я сделал этот маленький .png в Inkscape и думал, что поделюсь им.

введите описание изображения здесь