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

Matplotlib BoxPlot – Учебник и примеры

В этом уроке мы рассмотрим, как построить боксовые графики в Matplotlib с помощью Python. Мы подробно рассмотрим основные сюжеты коробок и настройку с примерами.

Автор оригинала: Dan Nelson.

Matplotlib BoxPlot – Учебник и примеры

Вступление

В Python существует множество библиотек визуализации данных, но Matplotlib-самая популярная библиотека из всех. Популярность Matplotlib объясняется его надежностью и полезностью – он способен создавать как простые, так и сложные графики с небольшим количеством кода. Вы также можете настроить графики различными способами.

В этом уроке мы рассмотрим как построить коробочные графики в Matplotlib .

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

Импорт Данных

Чтобы создать коробочный график, нам понадобятся некоторые данные для построения графика. Нам нужно будет выбрать набор данных, содержащий непрерывные переменные в качестве объектов, поскольку боковые графики визуализируют непрерывное распределение переменных. Мы будем работать с набором данных Качество вина .

Мы начнем с импорта всех библиотек, которые нам нужны. Мы импортируем Pandas для чтения и анализа набора данных, и нам, конечно же, нужно будет также импортировать Matplotlib, или, точнее, модуль PyPlot:

import pandas as pd
from matplotlib import pyplot as plt

Давайте проверим, готов ли наш набор данных к использованию. Мы распечатаем заголовок набора данных, чтобы убедиться, что данные были загружены правильно, а также проверим, нет ли отсутствующих записей данных:

dataframe = pd.read_csv("winequality-red.csv")
print(dataframe.head())
print(dataframe.isnull().values.any())
   fixed acidity  volatile acidity  citric acid  ...  sulphates  alcohol  quality
0            7.4              0.70         0.00  ...       0.56      9.4        5
1            7.8              0.88         0.00  ...       0.68      9.8        5
2            7.8              0.76         0.04  ...       0.65      9.8        5
3           11.2              0.28         0.56  ...       0.58      9.8        6
4            7.4              0.70         0.00  ...       0.56      9.4        5

[5 rows x 12 columns]
False

Второй оператор print возвращает False , что означает, что отсутствующих данных нет. Если бы они были, нам пришлось бы обрабатывать отсутствующие значения фрейма данных .

Постройте коробочный график в Matplotlib

Давайте выберем некоторые объекты набора данных и визуализируем их с помощью функции boxplot () . Мы будем использовать Pandas для извлечения нужных нам столбцов функций и сохранения их в качестве переменных для удобства:

fixed_acidity = dataframe["fixed acidity"]
free_sulfur_dioxide = dataframe['free sulfur dioxide']
total_sulfur_dioxide = dataframe['total sulfur dioxide']
alcohol = dataframe['alcohol']

Как обычно, мы можем вызвать функции построения графика на экземпляре Plot ( plot ), экземпляре Figure или экземпляре Axes :

import pandas as pd
import matplotlib.pyplot as plt

dataframe = pd.read_csv("winequality-red.csv")

fixed_acidity = dataframe["fixed acidity"]
free_sulfur_dioxide = dataframe['free sulfur dioxide']
total_sulfur_dioxide = dataframe['total sulfur dioxide']
alcohol = dataframe['alcohol']

fig, ax = plt.subplots()
ax.boxplot(fixed_acidity)
plt.show()

Здесь мы извлекли объекты fig и ax из возврата функции subplots () , поэтому мы можем использовать любой из них для вызова функции boxplot () . В качестве альтернативы мы могли бы просто вызвать plt.boxplot() .

В любом случае это приводит к:

После создания графика мы можем увидеть некоторые сводные статистические данные для наших данных. На прямоугольном графике показана медиана набора данных (вертикальная линия посередине), а также межквартильные диапазоны (концы прямоугольников) и минимальные и максимальные значения выбранного объекта набора данных (дальний конец “усов”).

Мы также можем построить несколько столбцов на одной фигуре, просто предоставив больше столбцов. Это опять же можно сделать либо на экземпляре plt , либо на объекте fig , либо на объекте ax .:

import pandas as pd
import matplotlib.pyplot as plt

dataframe = pd.read_csv("winequality-red.csv")

fixed_acidity = dataframe["fixed acidity"]
free_sulfur_dioxide = dataframe['free sulfur dioxide']
total_sulfur_dioxide = dataframe['total sulfur dioxide']
alcohol = dataframe['alcohol']

columns = [fixed_acidity, free_sulfur_dioxide, total_sulfur_dioxide, alcohol]

fig, ax = plt.subplots()
ax.boxplot(columns)
plt.show()

Это приводит к:

Теперь у нас есть гораздо больше работы, так как мы решили построить несколько столбцов.

Настройка Сюжета

Как вы можете видеть, хотя графики были успешно сгенерированы, без меток тиков на осях X и Y трудно интерпретировать график.

Мы можем настроить график и добавить метки к оси X с помощью функции xticks . Давайте передадим количество меток, которые мы хотим добавить, а затем метки для каждого из этих столбцов:

fig, ax = plt.subplots()
ax.boxplot(columns)
plt.xticks([1, 2, 3, 4], ["Fixed acidity", "Free sulfur dioxide", "Total sulfur dioxide", "Alcohol"], rotation=10)
plt.show()

При желании мы могли бы также изменить ориентацию графика, изменив параметр vert . vert определяет, будет ли график визуализироваться вертикально и будет ли он установлен на 1 по умолчанию:

fig, ax = plt.subplots()
ax.boxplot(fixed_acidity, vert=0)
plt.show()

Атрибут notch=True создает формат notch для boxplot, patch_artist=True заполняет boxplot цветами:

fig, ax = plt.subplots()
columns = [free_sulfur_dioxide, total_sulfur_dioxide]
ax.boxplot(columns, notch=True, patch_artist=True)
plt.xticks([1, 2], ["Free sulfur dioxide", "Total sulfur dioxide"])
plt.show()

Мы можем использовать аргумент mean line для отображения среднего значения на коробке, хотя этого следует избегать, если мы также показываем зарубки, так как они могут конфликтовать.

Это должно быть объединено с параметром snowman . Если это возможно, среднее значение будет визуализировано в виде линии, проходящей через всю коробку. Если это невозможно, то среднее значение будет показано в виде точек:

fig, ax = plt.subplots()
columns = [free_sulfur_dioxide, total_sulfur_dioxide]
ax.boxplot(columns, patch_artist=True, meanline=True, showmeans=True)
plt.xticks([1, 2], ["Free sulfur dioxide", "Total sulfur dioxide"])
plt.show()

Мы можем раскрасить столбец различных объектов, создав список шестнадцатеричных значений цвета и используя аргумент set_facecolor . В приведенном ниже примере мы zip элемент boxes переменной box вместе с цветами, которые мы хотим использовать, а затем устанавливаем цвет лица для каждого из этих ящиков.

columns = [fixed_acidity, free_sulfur_dioxide, total_sulfur_dioxide, alcohol]
fig, ax = plt.subplots()
box = ax.boxplot(columns, notch=True, patch_artist=True)
plt.xticks([1, 2, 3, 4], ["Fixed acidity", "Free sulfur dioxide", "Total sulfur dioxide", "Alochol"])

colors = ['#0000FF', '#00FF00',
          '#FFFF00', '#FF00FF']

for patch, color in zip(box['boxes'], colors):
    patch.set_facecolor(color)

plt.show()

Вывод

В этом уроке мы узнали, как создать коробочный график в Matplotlib и Python. Затем мы рассмотрели, как вы можете настроить его с помощью таких аргументов, как very , mean line и set_facecolor .

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

Визуализация данных в Python , книга для начинающих и промежуточных разработчиков Python, проведет вас через простые манипуляции с данными с Пандами, охватит основные библиотеки построения графиков, такие как Matplotlib и Seaborn, и покажет вам, как использовать преимущества декларативных и экспериментальных библиотек, таких как Altair.

Визуализация данных в Python