Seaborn boxplot индивидуальный интервал между коробками - PullRequest
0 голосов
/ 29 июня 2018

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

%matplotlib inline
import seaborn as sns
tips = sns.load_dataset("tips")
ax = sns.boxplot(x="day", y="total_bill", data=tips)

Tips Boxplot Example

1 Ответ

0 голосов
/ 01 июля 2018

Насколько мне известно, это невозможно с seaborn, потому что, к сожалению, он не предоставляет никаких средств для изменения ключевого слова positions. Смотрите также этот похожий вопрос .

Самый простой обходной путь - использовать другую функцию boxplot, например ту, которая поставляется с фреймами данных pandas:

bplot = tips.boxplot(by="day", column="total_bill", positions=[1,2,3,4.5])

Конечно, это далеко не так стильно, как версия Seaborn.

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

Это близко:

# Prep
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")

# Create boxplot
bplot = tips.boxplot(by="day", column="total_bill", positions=[1,2,3,4.5], 
                     return_type='dict', figsize=(8,6), grid=False, patch_artist=True, 
                     sym='d', fontsize=16)

# Style boxplot
colors = ['blue', 'green', 'red', 'cyan']
for patch, color in zip(bplot['total_bill']['boxes'], colors):
    patch.set_facecolor(color)
    patch.set_edgecolor('0.2')
    patch.set_linewidth(1.5)
for whisker in bplot['total_bill']['whiskers']:
    whisker.set_color('0.2')
    whisker.set_linewidth(1.5)
for fliers in bplot['total_bill']['fliers']:
    fliers.set_markerfacecolor('0.2')
for median in bplot['total_bill']['medians']:
    median.set_color('0.2')
    median.set_linewidth(1.5)
for caps in bplot['total_bill']['caps']:
    caps.set_color('0.2')
    caps.set_linewidth(1.5)

# Other adjustments
plt.title("")
plt.suptitle("")
plt.xlabel("day", fontsize=18)
plt.ylabel("total_bill", fontsize=18)

enter image description here

...