Рубрики
Без рубрики

Matplotlib boxplot – полезное иллюстрированное руководство

Узнайте основы BoxPlots – Как поручить одно- или несколько коробок и изменить их цвет, размер и ориентацию [+ бонусное видео]

Автор оригинала: Adam Murphy.

Вы хотите построить численные данные? И сделать это красиво, участвующим и научно обоснованным образом? И сделайте все это в несколько простых строк кода? Ты в нужном месте!

Отличный способ построить численные данные – это MATPLOTLIB boxplot Отказ Он отображает медиану, интерквартирный диапазон и выбросы данных.

Как вы можете визуализировать ваши данные с boxplot?

  1. Получите эти данные в список подобных массивам – список, Обмотка , серия Pandas и т. Д.
  2. Передать его PLT.BoxPlot () .
  3. Вызов PLT.Show () .

В результате Matplotlib нарисует прекрасный бакплат для вас.

import matplotlib.pyplot as plt

plt.boxplot(data)
plt.show()

Коробка ясно показывает медиану данных (оранжевую линию), верхних и нижних квартилей (верхних и нижних частей коробки) и выбросов (круги сверху и/или нижней части «усы» графика).

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

Попробуйте сами :

Вы можете играть простым примером здесь, в нашей интерактивной Python Shell онлайн. Полученный участок будет храниться в файле .png в онлайн-проекте (просто нажмите «Файлы»):

Пример Boxplot Matplotlib

BoxPlot – это необходимый инструмент, который вы должны использовать, когда при изучении наборов данных. matplotlib boxplot Функция принимает много аргументов ключевых слов, поэтому может показаться совершенно пугающими, если вы посмотрите на документы. Итак, я охвачу самые важные, которые вы будете использовать чаще всего.

Boxplots показывают распределение численных данных, в частности, они показывают, если это перекошены и есть ли необычные наблюдения/выбросы Отказ Они очень полезны, если вы имеете дело с большим количеством данных и хотите увидеть визуальное резюме – таким образом, они похожи на Гистограммы Отказ Они дают вам возможность сравнивать несколько дистрибутивов одновременно, потому что вы можете построить много баллонов на одной цифре. Это на самом деле не возможно с гистограммами – любого более 3, и он начинает смотреть переполнено.

Поскольку это статья о том, как лучше всего работать с Boxplots, я не буду подробно описан в том, как я создал наборы данных. Однако, если вы хотите следовать, я использовал библиотеки Meanborn и Pandas и код для генерации данных ниже. Наконец, вы можете найти больше информации здесь Отказ

import seaborn as sns
tips = sns.load_dataset('tips')

total_bill = tips.total_bill
data = tips.total_bill

thu = tips[tips.day == 'Thur'].total_bill
fri = tips[tips.day == 'Fri'].total_bill
sat = tips[tips.day == 'Sat'].total_bill
sun = tips[tips.day == 'Sun'].total_bill

Предположим, вы являетесь официантом/официанткой в ресторане, и вы записали общий счет в USD для каждой таблицы, который вы ждали с четверга – воскресенье на прошлой неделе. Вы хотите визуализировать эти данные, чтобы понять, какие дни, если таковые имеются, лучшие для работы. Общий счет за все дни хранится в total_bill И общий счет за каждый день хранится в переменных Чт , ПТИ , Сб и Солнце соответственно.

Давайте поговорка общий счет и добавьте некоторую информацию на оси и название.

plt.boxplot(total_bill)
plt.title('Total Bill ($) for All Days Last Week')
plt.ylabel('Total Bill ($)')
plt.show()

Это выглядит намного лучше, и теперь легко понять, что показывает BoxPlot. Мы видим, что медианный законопроект за каждую таблицу составляет около 17 долларов США, и что интерквартирный диапазон (верхний квартиль – нижний квартиль) составляет от 24 – USD. Есть около 8 выбросов, где законопроект был более 40 долларов США, а самый низкий законопроект составил около 3 долларов США.

Matplotlib boxplot кратко

Boxplots Позвольте вам сравнить распределения различных наборов данных. Итак, вы почти всегда хотите построить более одного BoxPlot на фигуре. Для этого передайте данные, которые вы хотите построить на PLT.BoxPlot () в виде списка списков.

# Create list of lists
all_days = [thu, fri, sat, sun]

# Pass to plt.boxplot()
plt.boxplot(all_days)
plt.show()

Здесь я объединил все отдельные наборы данных в список списков all_days и прошло это к PLT.BoxPlot () Отказ MATPLOTLIB автоматически размещает четыре коробки приятным расстоянию, но не помечает оси X для нас. Давайте сделаем это сейчас.

Matplotlib Boxplot этикетки

Наследить каждый boxplot, пропустите список строк в этикетки Ключевое слово аргумент. Если у вас есть несколько ярлыков, я рекомендую вам сделать это сначала, прежде чем передавать его на PLT.BoxPlot () Отказ

# Create data and labels first
all_days = [thu, fri, sat, sun]
labels = ['Thu', 'Fri', 'Sat', 'Sun']

# Plot data and labels
plt.boxplot(all_days, labels=labels)
plt.ylabel('Total Bill ($)')
plt.show()

Отлично, теперь мы видим, что каждый BoxPlot представляет общий счет за каждый день недели, а какой день находится какой.

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

all_days = [thu, fri, sat, sun]

# Second label is an empty string, fourth is a float
labels = ['Thu', '', 'Sat', 999.9]

plt.boxplot(all_days, labels=labels)
plt.show()

Теперь ваши баллоны выглядят намного лучше, но настройки MATPLOTLIB по умолчанию довольно скучно. Важно принять вашим визуализациям и одним из лучших способов сделать это – это добавить немного цвета.

Matplotlib boxplot Заполнить цвет

Чтобы просто заполнить цвет коробки, сначала нужно настроить Patch_artist = True Отказ Почему это?

Под капотом PLT.BoxPlot () Возвращает словарь, содержащий каждую часть коробки и эти части Line2d объекты. Однако по определению они не имеют Эджеколор или FaceColor – Линии просто имеют один цвет.

Чтобы раскрасить внутри коробки, вы должны превратить его в Патч объект Что, по определению, имеет FaceColor Отказ

Чтобы изменить поле, используйте BoxProps (Box Properties) Аргумент ключевых слов. Он принимает словарь и пару клавиш, вам нужен «FaceColor» плюс цвет.

# Turn box into a Patch so that it has a facecolor property
plt.boxplot(total_bill, patch_artist=True,
            # Set facecolor to red
            boxprops=dict(facecolor='r'))
plt.show()

Обратите внимание, что если вы не установите Patch_artist = True , вы получите ошибку.

# Not setting patch_artist=True gives an error
plt.boxplot(total_bill,
            # Set facecolor to red
            boxprops=dict(facecolor='r'))
plt.show()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
 in 
      2 plt.boxplot(total_bill,
      3             # Set facecolor to red
----> 4             boxprops=dict(facecolor='r'))
      5 plt.show()
        
AttributeError: 'Line2D' object has no property 'facecolor'

Если вы также хотите изменить цвет линии, окружающей коробку, пройдите дополнительный аргумент Color = C Для некоторого цвета C . к BoxProps Отказ

# Turn box into a Patch so that it has a facecolor property
plt.boxplot(total_bill, patch_artist=True,
            # Set facecolor and surrounding line to red
            boxprops=dict(facecolor='r', color='r'))
plt.show()

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

Matplotlib boxplot цвет

Вы можете изменить любую часть BoxPlot в любой цвет, который вы хотите.

Есть 6 частей, которые вы можете цвет:

  1. коробка – основное тело коробки
  2. Медиана – горизонтальная линия, иллюстрирующая медиану распределения
  3. Усы – вертикальные линии, распространяющиеся в самые экстремальные (некиневые) точки данных
  4. CAPS – горизонтальные линии на концах усов
  5. ЛИТЕРЫ – Очки выше/ниже крышек, представляющих выбросы
  6. Среднее – горизонтальная линия, иллюстрирующая среднее значение распределений (по умолчанию не включено)

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

Каждая из деталей может быть изменена на <Часть> реквизиты Аргумент ключевых слов, похоже на BoxProps один выше.

Доступные аргументы ключевых слов:

boxprops, medianprops, whisperprops, capprops, flierprops, meanprops

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

medianprops=dict(color='red')

Все они принимают цвет Аргумент ключевых слов и значение может быть любой цветной строки MATPLOTLIB. Единственный другой – FlierProps который также принимает Маркерджеколор раскрасить линию вокруг выбросов.

Наконец, не забудьте установить Patch_artist = True Если вы хотите изменить цветной цвет коробки.

Давайте посмотрим на пример, где я поворачиваю весь BoxPlot Red. Поскольку есть так много аргументов ключевых слов для пропускания, я сначала создаю словарь и использую ** Оператор распаковать его в моем PLT.BoxPlot () вызов.

# Set color to red
c = 'r'

# Create dictionary of keyword aruments to pass to plt.boxplot
red_dict =  {'patch_artist': True,
             'boxprops': dict(color=c, facecolor=c),
             'capprops': dict(color=c),
             'flierprops': dict(color=c, markeredgecolor=c),
             'medianprops': dict(color=c),
             'whiskerprops': dict(color=c)}

# Pass dictionary to boxplot using ** operator to unpack it
plt.boxplot(total_bill, **red_dict)
plt.show()

Сначала я создал переменную C . Чтобы удерживать цветную строку в. Это означает, что если я хочу изменить цвет на зеленый, мне нужно только изменить одну строку кода – C . – И это изменит цвет везде.

Тогда я создал red_dict где пары ключа-значений представляют собой строку и словарь. Первый ключ Patch_artists = True и другие ключи являются <Часть> реквизиты Ключевое слово аргумент. Наконец, я создал Boxplot total_bill и красный цвет красный, распаковка red_dict с ** оператор.

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

Красный сюжет гораздо больше участвует, чем стандартные цвета MATPLOTLIB. Но, потому что средняя линия была того же цвета, что и все остальное, вы потеряли некоторую информацию, которую она показала. Один из способов исправить это, чтобы установить срединную линию к черному с «Медиануры»:) в red_dict Отказ Результат показан выше.

Matplotlib boxplot ширина

Чтобы изменить ширину boxplot, пропустите поплавок к Ширина Аргумент ключевых слов в PLT.BoxPlot () Отказ Он представляет собой долю пространства, которое коробка занимает на рисунке.

Если у вас есть один boxplot, скаляр представляет процент сюжета, который требуется коробка.

plt.boxplot(total_bill, widths=1)
plt.show()

Здесь коробка занимает 100% ширины, как ширина = 1 Отказ

plt.boxplot(total_bill, widths=0.1)
plt.show()

Здесь коробка занимает 10% пространства, как ширина = 0,1 Отказ

Если вы записали несколько боксов на той же фигуре и пропустите поплавок к Ширина Все ящики будут изменены в размере, чтобы занять эту долю пространства в своей области сюжета.

# Boxes take up 100% of their allocated space
plt.boxplot(all_days, widths=1)
plt.show()

Здесь каждый BoxPlot занимает 100% пространства, выделенного как ширина = 1 Отказ

# Boxes take up 80% of their allocated space
plt.boxplot(all_days, widths=0.8)
plt.show()

Здесь каждый Boxplot занимает 80% пространства, выделенного им как ширина = 0,8 Отказ

Вы можете установить ширину каждого boxplot индивидуально, передавая Список к Ширина вместо скаляра. В [83]:

plt.boxplot(all_days, widths=[0.1, 0.9, 0.5, 0.8], labels=['10%', '90%', '50%', '80%'])
plt.show()

Здесь я пометил количество горизонтального пространства, которое занимает каждую коробку. Хотя это можно сделать, я не рекомендую это. Добавляет другое измерение в ваш BoxPlot, но не показывает какую-либо новую информацию. Я лично думаю, что ширина = 0,8 Выглядит лучше всего, но вы можете выбрать любой размер, который вы хотите. Просто убедитесь, что ваши баллоны одинаковы шириной, чтобы не запутать ваш читатель.

Matplotlib boxplot горизонтальный

Создать горизонтальный Boxplot в Matplotlib, установите Vert Аргумент ключевых слов на Ложь Отказ

plt.boxplot(total_bill, vert=False)
plt.show()

Вывод

Вот и все, теперь вы знаете все основы Boxplots в Matplotlib!

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

Еще больше нужно узнать о таких коробках, таких как изменение маркера выбросов, добавляя легенды, сортируя их по группам и даже работать с ними и библиотекой Panda. Но я уйду это для другой статьи.

Куда пойти отсюда?

Вы хотите, чтобы вы могли быть программистом на полный рабочий день, но не знаете, как начать?

Ознакомьтесь с чистым упаковочным величином, где Chris – Creator of Finxter.com – учит вас стать фрилансером Python в 60 дней или вернуть деньги!

https://tinyurl.com/become-a-python-freelancer

Неважно, если вы начинаете питон или Python Pro. Если вы не делаете шесть фигур/год с Python прямо сейчас, вы узнаете что-то из этого вебинара.

Это доказаны, методы NO-BS, которые получают ваши результаты быстро.

Этот вебинар не будет онлайн навсегда. Нажмите на ссылку ниже, прежде чем сиденья наполнится и научитесь стать фрилансером Python, гарантированно.

https://tinyurl.com/become-a-python-freelancer

Expert Writer & Content Creator – наука о науке и машине. – Я помогаю образовательным компаниям создавать привлечение в блоге и видеоконтентах преподавания данных науки для начинающих. В отличие от моих конкурентов, я узнаю новые концепции каждый день и так понимаю, что это нравится быть студентом. Мои статьи легко понять, эффективны и приятно читать. Мои видео достойны, участвуют и подробно. – Работать со мной, пожалуйста, обратитесь к Upwork https://tinyurl.com/hire-adam-murphy