Настройте значение усов в boxplot, python

Я хочу построить блок-график со средним значением + (-) 2 * std в качестве предельных значений Whisker. Однако boxplot() может устанавливать только верхние значения усов как значения процентилей. например

# The code below plot a boxplot that has cap values equal to 5th and 95th percentiles. 
boxplot(data_list,Whis = [5,95])

Учитывая, что мое распределение не является нормальным, то 95-й/5-й процентили не будут (среднее + 2 стандартное значение)/(среднее значение - 2 стандартного значения). Следовательно, неточно использовать значения 5/95-го процентиля для представления среднего + (-) 2 * стандартное значение.

Мой вопрос: как я могу получить коробку с настраиваемыми значениями шапки усов? Большое спасибо

Добро пожаловать в СО. Это не дискуссионный форум или учебник.

wwii 21.12.2020 04:40

Я не думаю, что boxplot может удовлетворить ценности Whisker. Вот почему я спросил здесь.

Yufeng Yao 21.12.2020 04:50

Если вы думаете, что они не могут быть настроены, почему вы спросили. Прочтите Учебники по Matplotlib — почти все можно настроить, Whiskers — это Artists — у них есть свойства и методы.

wwii 21.12.2020 05:00

Были ли какие-либо решения из примера Boxplots в галерее полезными?

wwii 21.12.2020 05:05

В документации boxplot есть ссылка на источник — вы сможете увидеть, как рассчитываются и позиционируются усы, что должно дать вам отправную точку.

wwii 21.12.2020 05:16

Спасибо чувак. Я читал учебник и документацию несколько раз. Интересно, есть ли способ создать коробку с настраиваемыми значениями усов?

Yufeng Yao 21.12.2020 05:28

Извините, чувак, я не думаю, что ясно излагаю свой вопрос. Мой вопрос заключается в том, что максимальное значение boxplot (Конец усов) может быть установлено только как значение процентилей. Однако я хочу установить значение ограничения как среднее + (-) 2 * стандартное значение. среднее значение +(-) 2*std, не равное никаким процентильным значениям. Как я могу это сделать?

Yufeng Yao 21.12.2020 05:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
1 221
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Matplotlib не предоставляет никаких средств для указания усов, кроме как квантилей. Если вы хотите использовать среднее значение и стандартное отклонение, умноженное на ± 2, вам нужно будет свернуть свои собственные значения, т. Е. Преобразовать эти значения в процентили и предоставить их в качестве параметров whis.

Пример:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)
data = np.random.normal(size=10_000)

mean = np.mean(data)
std = np.std(data)
whis = np.interp([mean-2*std, mean+2*std], np.sort(data), np.linspace(0,1,data.size)) * 100

fig, (axl,axr) = plt.subplots(ncols=2)
axl.set_title('Default')
axl.boxplot(data)
axr.set_title(f'μ ± 2σ ({mean-2*std:.2f}, {mean+2*std:.2f})')
axr.boxplot(data, whis=whis, usermedians=[mean])

Есть одно предостережение: усы рисуются не от заданного первого до заданного второго значения процентиля (параметр whis), а скорее от самой низкой точки данных над первой до самой высокой точки данных ниже значения второй процентили. Вот почему для относительно небольших наборов данных усы заканчиваются на графике, чтобы не точно соответствовать μ ± 2σ.

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

код красивый и чистый (так что +1). Я также нахожу усы неинтуитивными и использую специально нарисованный блок-график (но в MATLAB). В любом случае: одно предупреждение (в основном для ОП): я предпочитаю, чтобы усы были на квантиле 5% и 95%. Это может быть трудно читать, если ящичковая диаграмма представляет не квантили, а кратные стандартному отклонению (которое надеется получить гауссово распределение данных...)

max 21.12.2020 11:33

Большое спасибо. Ваш комментарий очень полезен.

Yufeng Yao 22.12.2020 04:01

Другие вопросы по теме