Установка стиля flier (outlier) в Seaborn boxplot игнорируется

используя Сиборн, Я могу создавать boxplots из нескольких столбцов одного pandas DataFrame на том же рисунке. Я хотел бы применить пользовательский стиль к листовкам (выбросам), например, установить символ маркера, цвет и размер маркера.

документация API по seaborn.коробчатой диаграммы, однако, предоставляет только аргумент fliersize что позволяет мне контролировать размер листовок, но не цвет и символ.

поскольку Seaborn использует matplotlib для построения, I думал, что я могу предоставить словарь стилей matplotlib для вот так:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# create a dataframe
df = pd.DataFrame({'column_a': [3, 6, 200, 100, 7], 'column_b': [1, 8, 4, 150, 290], 'column_c': [6, 7, 20, 80, 275]})

# set figure size
sns.set(rc={"figure.figsize": (14, 6)})

# define outlier properties
flierprops = dict(marker='o', markersize=5)

# create boxplot
ax = sns.boxplot(df, vert=False, showmeans=True, flierprops=flierprops)
plt.show()

результат:

Boxplot Согласно предоставленному словарю, я ожидал бы большой красный круг, представляющий флаер column_c но вместо этого по-прежнему используются стандартные настройки.

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

я попробовал это с помощью ноутбука iPython (iPython 3.10), matplotlib 1.4.3 и seaborn 0.5.1.

1 ответов


код boxplot Seaborn игнорирует ваш аргумент flierprops и перезаписывает его своим собственным, прежде чем передавать аргументы Matplotlib. Boxplot Matplotlib также возвращает все объекты flier как часть возвращаемого значения, поэтому вы можете изменить это после запуска boxplot, но Seaborn не возвращает это.

перезапись flierprops (и sym) кажется ошибкой, поэтому я посмотрю, смогу ли я это исправить: см. этот вопрос. Между тем, вы можете рассмотреть возможность использования matplotlib вместо этого boxplot. Просмотр кода seaborn может быть полезен (boxplot находится в distributions.py).


Update: теперь есть запрос на вытягивание, который исправляет это (flierprops и другие *props, а не sym)