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

Получение значений, используемых в boxplot, с использованием python и matplotlib

Я могу нарисовать коробку из данных:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(100)
plt.boxplot(data)

Затем поле будет варьироваться от 25-процентного до 75-го процентиля, а усов будет варьироваться от наименьшего значения до самого большого значения между (25-процентный - 1,5 * IQR, 75-процентный плюс + 1,5 * IQR), где IQR обозначает межквартильный диапазон. (Конечно, значение 1.5 настраивается).

Теперь я хочу знать значения, используемые в boxplot, то есть медианный, верхний и нижний квартили, конечная точка верхнего низа и нижняя конечная точка нижнего уса. В то время как первые три легко получить с помощью np.median() и np.percentile(), конечная точка усов потребует некоторого подробного кодирования:

median = np.median(data)
upper_quartile = np.percentile(data, 75)
lower_quartile = np.percentile(data, 25)

iqr = upper_quartile - lower_quartile
upper_whisker = data[data<=upper_quartile+1.5*iqr].max()
lower_whisker = data[data>=lower_quartile-1.5*iqr].min()

Мне было интересно, хотя это приемлемо, был бы более простой способ сделать это? Кажется, что ценности должны быть готовы вытащить из ящика, как он уже нарисован.

Спасибо!

4b9b3361

Ответ 1

Почему вы хотите это сделать? то, что вы делаете, уже довольно прямо.

Да, если вы хотите получить их для сюжета, когда сюжет уже сделан, просто используйте метод get_ydata().

B=plt.boxplot(data)
[item.get_ydata() for item in B['whiskers']]

Он возвращает массив формы (2) для каждого усы, второй элемент - это значение, которое мы хотим:

[item.get_ydata()[0] for item in B['whiskers']]