Введение
В этом лабораторном занятии мы научимся визуализировать дискретные распределения с использованием горизонтальных накопленных столбчатых диаграмм. Мы будем использовать Matplotlib, популярную библиотеку для построения графиков в Python, для создания визуализации результатов опроса.
Советы по работе с ВМ
После завершения запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений в Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импорт библиотек
Сначала мы импортируем необходимые библиотеки. В этой лабораторной работе мы будем использовать Matplotlib и Numpy.
import matplotlib.pyplot as plt
import numpy as np
Подготовка данных
Нам необходимо определить категории и результаты опроса. В этом примере у нас есть опрос, в котором люди оценивали свою согласованность с вопросами по пятибалльной шкале. Мы определим категории как category_names, а результаты опроса как results.
category_names = ['Strongly disagree', 'Disagree',
'Neither agree nor disagree', 'Agree', 'Strongly agree']
results = {
'Question 1': [10, 15, 17, 32, 26],
'Question 2': [26, 22, 29, 10, 13],
'Question 3': [35, 37, 7, 2, 19],
'Question 4': [32, 11, 9, 15, 33],
'Question 5': [21, 29, 5, 5, 40],
'Question 6': [8, 19, 5, 30, 38]
}
Определение функции
Теперь мы определим функцию под названием survey, которая принимает results и category_names и создает визуализацию горизонтальной накопленной столбчатой диаграммы.
def survey(results, category_names):
"""
Параметры
----------
results : dict
Отображение от меток вопросов до списка ответов для каждой категории.
Предполагается, что все списки содержат одинаковое количество элементов и
что оно соответствует длине *category_names*.
category_names : список строк
Метки категорий.
"""
## Преобразуем результаты и категории в numpy массивы
labels = list(results.keys())
data = np.array(list(results.values()))
## Вычисляем накопленные суммы данных для горизонтальной накопки
data_cum = data.cumsum(axis=1)
## Определяем цвета категорий
category_colors = plt.colormaps['RdYlGn'](
np.linspace(0.15, 0.85, data.shape[1]))
## Создаем график и настраиваем оси
fig, ax = plt.subplots(figsize=(9.2, 5))
ax.invert_yaxis()
ax.xaxis.set_visible(False)
ax.set_xlim(0, np.sum(data, axis=1).max())
## Создаем накопленные столбцы и добавляем метки столбцов
for i, (colname, color) in enumerate(zip(category_names, category_colors)):
widths = data[:, i]
starts = data_cum[:, i] - widths
rects = ax.barh(labels, widths, left=starts, height=0.5,
label=colname, color=color)
r, g, b, _ = color
text_color = 'white' if r * g * b < 0.5 else 'darkgrey'
ax.bar_label(rects, label_type='center', color=text_color)
## Добавляем легенду
ax.legend(ncols=len(category_names), bbox_to_anchor=(0, 1),
loc='lower left', fontsize='small')
return fig, ax
Вызов функции и отображение результатов
Наконец, мы вызовем функцию survey с results и category_names в качестве входных данных и отобразим полученную визуализацию.
survey(results, category_names)
plt.show()
Резюме
В этой лабораторной работе мы узнали, как создавать горизонтальную накопленную столбчатую диаграмму для визуализации дискретных распределений с использованием Matplotlib. Мы определили категории и результаты опроса, создали функцию для генерации графика и отобразили результаты. Эта техника может быть полезной для визуализации результатов опросов или других типов дискретных распределений.