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()
Вывод:
Настройка блок-графика
Функция 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()
Вывод:
Пример 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()
Вывод: