Box Plot, также известный как Whisker plot, создается для отображения сводной информации по набору значений данных, имеющих такие свойства, как минимум, первый квартиль, медиана, третий квартиль и максимум. На прямоугольном графике создается прямоугольник от первого квартиля до третьего квартиля, а также присутствует вертикальная линия, проходящая через прямоугольник по медиане. Здесь ось X обозначает данные, которые будут отображаться, а ось Y показывает распределение частот.

Создание

Box Plot

Модуль matplotlib.pyplot библиотеки matplotlib предоставляет функцию boxplot(), с помощью которой мы можем создавать коробчатые диаграммы.

Синтаксис: 

matplotlib.pyplot.boxplot(data, notch=None, vert=None, patch_artist=None, widths=None)

Параметры: 

Attribute Value
data array or sequence of array to be plotted
notch optional parameter accepts boolean values
vert optional parameter accepts boolean values false and true for horizontal and vertical plot respectively
bootstrap optional parameter accepts int specifies intervals around notched boxplots
usermedians optional parameter accepts array or sequence of array dimension compatible with data
positions optional parameter accepts array and sets the position of boxes
widths optional parameter accepts array and sets the width of boxes
patch_artist optional parameter having boolean values
labels sequence of strings sets label for each dataset
meanline optional having boolean value try to render meanline as full width of box
order optional parameter sets the order of the boxplot

Значения данных, передаваемые методу ax.boxplot(), могут быть массивом Numpy, списком Python или кортежем массивов. Давайте создадим диаграмму размаха, используя numpy.random.normal() для создания случайных данных. В качестве аргументов она принимает среднее значение, стандартное отклонение и желаемое количество значений.

Пример: 

# Import libraries
import matplotlib.pyplot as plt
import numpy as np


# Creating dataset
np.random.seed(10)
data = np.random.normal(100, 20, 200)

fig = plt.figure(figsize =(10, 7))

# Creating plot
plt.boxplot(data)

# show plot
plt.show()

Вывод: 

блок-график-python

Настройка блок-графика

Функция matplotlib.pyplot.boxplot() предоставляет бесконечные возможности для настройки коробчатого графика. Атрибут notch = True создает формат выемки на коробчатом графике, а атрибут patch_artist = True заполняет коробчатый график цветами. Мы можем задать разные цвета для разных ячеек. Атрибут vert = 0 создает горизонтальный коробчатый график. Метки имеют те же размеры, что и наборы числовых данных.

Пример 1: 

# Import libraries
import matplotlib.pyplot as plt
import numpy as np


# Creating dataset
np.random.seed(10)

data_1 = np.random.normal(100, 10, 200)
data_2 = np.random.normal(90, 20, 200)
data_3 = np.random.normal(80, 30, 200)
data_4 = np.random.normal(70, 40, 200)
data = [data_1, data_2, data_3, data_4]

fig = plt.figure(figsize =(10, 7))

# Creating axes instance
ax = fig.add_axes([0, 0, 1, 1])

# Creating plot
bp = ax.boxplot(data)

# show plot
plt.show()

Вывод: 

блок-график-python

Пример 2: Давайте попробуем изменить приведенный выше график с помощью некоторых настроек:

# Import libraries
import matplotlib.pyplot as plt
import numpy as np

# Creating dataset
np.random.seed(10)
data_1 = np.random.normal(100, 10, 200)
data_2 = np.random.normal(90, 20, 200)
data_3 = np.random.normal(80, 30, 200)
data_4 = np.random.normal(70, 40, 200)
data = [data_1, data_2, data_3, data_4]

fig = plt.figure(figsize =(10, 7))
ax = fig.add_subplot(111)

# Creating axes instance
bp = ax.boxplot(data, patch_artist = True,
                notch ='True', vert = 0)

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

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

# changing color and linewidth of
# whiskers
for whisker in bp['whiskers']:
    whisker.set(color ='#8B008B',
                linewidth = 1.5,
                linestyle =":")

# changing color and linewidth of
# caps
for cap in bp['caps']:
    cap.set(color ='#8B008B',
            linewidth = 2)

# changing color and linewidth of
# medians
for median in bp['medians']:
    median.set(color ='red',
               linewidth = 3)

# changing style of fliers
for flier in bp['fliers']:
    flier.set(marker ='D',
              color ='#e7298a',
              alpha = 0.5)
    
# x-axis labels
ax.set_yticklabels(['data_1', 'data_2', 
                    'data_3', 'data_4'])

# Adding title 
plt.title("Customized box plot")

# Removing top axes and right axes
# ticks
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
    
# show plot
plt.show()

Вывод: 

блок-график-python