Как остановить скрипичный сюжет, отсекающий выбросы или экстремальные значения

Слева у меня рисунок морской скрипки, а справа - матплотлиб.

Как видите, matplotlib удаляет некоторые значения / данные, даже если showextrema = True или False, что не имеет никакого эффекта. Как заставить matplotlib использовать скрипичный сюжет для сохранения этих значений?

import matplotlib.pyplot as plt
import seaborn as sns

a = [195.0, 245.0, 142.0, 237.0, 153.0, 238.0, 168.0, 145.0, 229.0, 138.0, 176.0, 116.0, 252.0, 148.0, 199.0, 162.0, 134.0, 163.0, 130.0, 339.0, 152.0, 208.0, 152.0, 192.0, 163.0, 249.0, 113.0, 176.0, 123.0, 189.0, 150.0, 207.0, 184.0, 153.0, 228.0, 153.0, 170.0, 118.0, 302.0, 197.0, 211.0, 159.0, 228.0, 147.0, 166.0, 156.0, 167.0, 147.0, 126.0, 155.0, 138.0, 159.0, 139.0, 111.0, 133.0, 134.0, 131.0, 156.0, 240.0, 207.0, 150.0, 207.0, 265.0, 151.0, 173.0, 157.0, 261.0, 186.0, 195.0, 158.0, 272.0, 134.0, 221.0, 131.0, 252.0, 148.0, 178.0, 206.0, 146.0, 217.0, 159.0, 190.0, 156.0, 172.0, 159.0, 141.0, 167.0, 168.0, 218.0, 191.0, 207.0, 164.0]

fig, axes = plt.subplots()

# Seaborn violin plot
sns.violinplot(data=a, width=0.6, color="w" )

# Matplotlib violin plot
axes.violinplot(a, showmeans=True, showmedians=False, showextrema=False, widths = 0.6)
axes.set_xticks([y+1 for y in range(2)])
plt.show()

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


person Anderson    schedule 06.08.2017    source источник
comment
Минимальное значение в списке 111. Почему вы ожидаете, что график будет ниже этого значения? Или почему вы утверждаете, что данные удалены?   -  person ImportanceOfBeingErnest    schedule 06.08.2017
comment
@ImportanceOfBeingErnest Да, это правда. Я должен уточнить, почему обрезается оценка плотности ядра. Как мне позволить экстраполировать   -  person Anderson    schedule 06.08.2017


Ответы (1)


Диапазон, в котором строится KDE для скрипичного графика matplotlib, - это диапазон входных значений. Это определено довольно глубоко в коде, поэтому нет простого варианта изменить это.

Напротив, сценарий морской скрипки позволяет хорошо контролировать диапазон KDE. По умолчанию он расширяет показанную кривую KDE вдвое по сравнению с KDE на каждой стороне графика. Это управляется аргументом cut для sns.violinplot(, cut=2), который по умолчанию равен 2. Если вы установите cut=0, вы получите то же, что и сценарий скрипки matplotlib. Вместе с возможностью вручную выбрать пропускную способность KDE как float, sns.violinplot(..., bw = 0.2, cut=2), у вас есть очень хороший контроль над тем, как отображается сценарий скрипки.

В заключение, просто используйте диаграмму морской скрипки, если вам нужен точный контроль над диапазоном кривой KDE.

person ImportanceOfBeingErnest    schedule 07.08.2017