Как строить красивые графики на Python с Seaborn
Визуализация данных — это метод, который позволяет специалистам по анализу данных преобразовывать сырые данные в диаграммы и графики, которые несут ценную информацию. Диаграммы уменьшают сложность данных и делают более понятными для любого пользователя.
Есть множество инструментов для визуализации данных, таких как Tableau, Power BI, ChartBlocks и других, которые являются no-code инструментами. Они очень мощные, и у каждого своя аудитория. Однако для работы с сырыми данными, требующими обработки, а также в качестве песочницы, Python подойдет лучше всего.
Несмотря на то, что этот путь сложнее и требует умения программировать, Python позволит вам провести любые манипуляции, преобразования и визуализировать ваши данные. Он идеально подходит для специалистов по анализу данных.
Python — лучший инструмент для data science и этому много причин, но самая важная — это его экосистема библиотек. Для работы с данными в Python есть много замечательных библиотек, таких как numpy , pandas , matplotlib , tensorflow .
Matplotlib , вероятно, самая известная библиотека для построения графиков, которая доступна в Python и других языках программирования, таких как R. Именно ее уровень кастомизации и удобства в использовании ставит ее на первое место. Однако с некоторыми действиями и кастомизациями во время ее использования бывает справиться нелегко.
Разработчики создали новую библиотеку на основе matplotlib , которая называется seaborn . Seaborn такая же мощная, как и matplotlib , но в то же время предоставляет большую абстракцию для упрощения графиков и привносит некоторые уникальные функции.
В этой статье мы сосредоточимся на том, как работать с seaborn для создания первоклассных графиков. Если хотите, можете создать новый проект и повторить все шаги или просто обратиться к моему руководству по seaborn на GitHub.
Что такое Seaborn?
Seaborn — это библиотека для создания статистических графиков на Python. Она основывается на matplotlib и тесно взаимодействует со структурами данных pandas.
Архитектура Seaborn позволяет вам быстро изучить и понять свои данные. Seaborn захватывает целые фреймы данных или массивы, в которых содержатся все ваши данные, и выполняет все внутренние функции, нужные для семантического маппинга и статистической агрегации для преобразования данных в информативные графики.
Она абстрагирует сложность, позволяя вам проектировать графики в соответствии с вашими нуждами.
Установка Seaborn
Установить seaborn так же просто, как и любую другую библиотеку, для этого вам понадобится ваш любимый менеджер пакетов Python. Во время установки seaborn библиотека установит все зависимости, включая matplotlib , pandas , numpy и scipy .
Давайте уже установим seaborn и, конечно же, также пакет notebook , чтобы получить доступ к песочнице с данными.
pipenv install seaborn notebook
Помимо этого, перед началом работы давайте импортируем несколько модулей.
import seaborn as sns import pandas as pd import numpy as np import matplotlib
Строим первые графики
Перед тем, как мы начнем строить графики, нам нужны данные. Прелесть seaborn в том, что он работает непосредственно с объектами dataframe из pandas , что делает ее очень удобной. Более того, библиотека поставляется с некоторыми встроенными наборами данных, которые можно использовать прямо из кода, и не загружать файлы вручную.
Давайте посмотрим, как это работает на наборе данных о рейсах самолетов.
flights_data = sns.load_dataset("flights") flights_data.head()
Python: Построение графиков по данным из файла
Когда я был ВУЗ(овцем) нам на первом курсе на лабораторных работах по Физике часто приходилось строить графики. Причем рисовать их приходилось от руки на миллиметровой бумаге. Выглядело это кустарно. С первого раза начертить график не получалось. Приходилось стирать ластиком. Миллиметровая шкала стиралась. На графике появлялись белые облака.
Тогда в 200x просто не хватало навыков программирования чтобы отрисовать эти графики на PC. Сейчас же построить график можно с легкостью на LapTop(е). Причем существует целая куча разных способов построить график на PC. Это можно делать в Google Spreadsheets, MatLab, MathCAD, GNU Octave, GNU Plot, MS Excel, GraphViz, Asymptote.
Попробуем еще построить график на Python при помощи программного компонента matplotlib.
Постановка задачи:
Есть файл LiLog.csv. Вот несколько его строчек:
14, 1.833, 22.25, 22:43:09, 9/7/2023, 1517544445 15, 0.833, 22.25, 22:43:29, 9/7/2023, 1517544465 16, 0.000, 22.25, 22:43:49, 9/7/2023, 1517544485 17, 0.833, 22.25, 22:44:09, 9/7/2023, 1517544505
Надо построить 2D график, где по оси Х n-ный столбец, а по оси Y — k-тый столбец из текстового файла.
Что надо из софтвера?
Программа
Назначение
Интерпретатор язык программирования Python
Модуль для визуализации
Модуль синтаксического разбора *.CSV файлов
Текстовый редактор для написания Python скрипта и редактирования файла с исходными данными для графика
Решение
Вот этот скрипт берет *.csv файл и строит график по 4му и 2му столбцу.
import matplotlib.pyplot as plt import csv X = [] Y = [] with open('LiLog.csv', 'r') as datafile: plotting = csv.reader(datafile, delimiter=';') for ROWS in plotting: X.append(float(ROWS[5])) Y.append(float(ROWS[1])) plt.plot(X, Y) plt.title('Line Graph using CSV') plt.xlabel('X') plt.ylabel('Y') plt.show()
Что происходит в этом скрипте. Программа создает 2 списка: X Y. В список X помещает числа из 4го столбца в список Y помещает данные из второго столбца. Затем программа отрисовывает график по этим значениям на канве в отдельном окне.
Получился вот такой график

Также в график можно добавить еще один график, пояснения (легенду).
import matplotlib.pyplot as plt import csv X = [] Y = [] with open('LiLog.csv', 'r') as datafile: plotting = csv.reader(datafile, delimiter=';') for ROWS in plotting: X.append(float(ROWS[5])) #X.append('<> <>'.format(ROWS[3], ROWS[4])) Y.append(float(ROWS[1])) print ('X <> Nums'.format(len(X))) print ('Y <> Nums'.format(len(Y))) threshold=63.0 T=[threshold]*len(Y) print ('Type X <> '.format(type(X))) print ('Type Y <> '.format(type(Y))) print ('Type T <> '.format(type(T))) plt.plot(X, Y) plt.plot(X, T) plt.title('Illumination change') plt.xlabel('Time,[s]') plt.ylabel('Light level, [Lx]') plt.grid() plt.xticks(rotation=-90) plt.legend(['illumination', 'threshold <> Lx'.format(threshold)]) plt.show()
Чтобы это код исполнился надо предварительно в консоли прописать
pip install matplotlib
Вот, например, для наглядности добавлена прямая порогового значения для данного измерения на уровне 63 Люкс.

График в matplotlib не просто статический. Его можно увеличивать в интересующем месте и подставить поля графика в меню, которое расположено в нижнем левом углу окна.

Достоинства построения графиков на Python
- Это бесплатно. В отличие от MatLab, MathCAD в Python вы можете строить графики абсолютно бесплатно.
- Есть аналитика. Можно увеличивать график, сохранять график в формате *.png файла, задавать масштаб, подстраивать ширину полей, разворачивать шкалу, накладывать сетку.
- По Python скрипту можно сгенерировать *.exe файл на случай, если захочется скрыть алгоритм построения графика.
- Нет артефактов и временных файлов. Никаких *.o *.ld не нужно, как если бы вы решили писать графопостроитель на С++. Есть только *.py файл с исходником и больше ничего не нужно.
- Всё делается чисто кодом. Вам даже мышка не нужна чтобы построить график. Не будет болеть запястье.
- Благодаря Python можно исполнять скрипты в любой операционной системе: Windows, Linux и проч. Главное чтобы был интерпретатор Python и графическая оболочка.
Недостатки построения графиков в Python
- Не совсем ясно как отображать отсчеты графика в реальном времени. Например когда числа поступают с улицы из последовательного COM пота или TCP сокета.
Вывод
Интерпретатор Python в связке с Matplotlib это отличный вариант для визуализации экспериментальных данных из текстового *.csv файла.
Акроним
Расшифровка
Как построить график в python: подробное руководство
Python – один из самых популярных языков программирования, который предлагает множество инструментов для визуализации данных. Визуализация данных является неотъемлемой частью анализа данных и может помочь наглядно представить информацию и выявить скрытые закономерности и тренды.
Существует несколько библиотек в Python, позволяющих построить графики и диаграммы. Одной из самых популярных и мощных является библиотека Matplotlib. Matplotlib предоставляет множество функций и возможностей для создания различных типов графиков, начиная от простых линейных графиков и заканчивая сложными трехмерными диаграммами.
В этой статье мы рассмотрим основные шаги по построению графиков с использованием библиотеки Matplotlib. Мы покажем, как создать график, создать подписи осей, добавить легенду, изменить цвета и стили линий, а также сохранить график в файл. В конце статьи вы найдете примеры кода для разных видов графического представления данных, которые помогут вам начать работу с визуализацией данных в Python.
Выбор библиотеки для построения графиков в Python
Python предлагает множество библиотек для построения графиков, каждая из которых имеет свои плюсы и минусы. Выбор библиотеки для конкретной задачи зависит от требуемой функциональности, оформления графиков и уровня сложности.
Одной из наиболее популярных библиотек для построения графиков в Python является Matplotlib. Она обладает мощными возможностями и широким набором инструментов для создания разнообразных графиков. Matplotlib позволяет создавать как простые двумерные графики, так и сложные трехмерные визуализации данных. Библиотека также предоставляет множество опций для настройки внешнего вида графиков, включая цвета, шрифты, легенды и оси координат.
Другой популярной библиотекой для построения графиков в Python является Seaborn. Она является надстройкой над Matplotlib и предоставляет более простой и удобный интерфейс для создания статистических графиков. Seaborn предлагает набор готовых тем оформления, которые позволяют быстро и красиво оформить график. Кроме того, библиотека включает функции для визуализации распределения данных и работы с категориальными переменными.
Для создания интерактивных графиков в Python можно использовать библиотеку Plotly. Она позволяет превратить статический график в динамический, добавляя возможности масштабирования, перемещения и взаимодействия с данными на графике. Plotly также предлагает множество опций для настройки оформления графиков и включает функции для создания диаграмм, карт и трехмерных графиков.
Другие популярные библиотеки для построения графиков в Python включают Pandas, которая предоставляет удобные методы для работы с данными и создания простых графиков, и Bokeh, которая специализируется на создании интерактивных веб-графиков с использованием JavaScript.
В итоге, выбор библиотеки для построения графиков в Python зависит от требуемой функциональности, уровня сложности задачи и предпочтений разработчика. Рекомендуется ознакомиться с основными библиотеками и экспериментировать с их возможностями, чтобы найти наиболее подходящий инструмент для решения конкретной задачи.
Подготовка данных для построения графика
Когда мы готовимся построить график в Python, первый и самый важный шаг – это подготовка данных. Без правильной обработки и форматирования данных, график может быть неправильным или непонятным.
Перед началом работы с данными, необходимо проверить их на наличие ошибок, пропущенных значений и несогласованности. Для этого можно использовать различные инструменты, такие как pandas или numpy . Эти библиотеки позволяют анализировать и управлять данными, проводить операции по обработке пропущенных значений, фильтрации и сортировке данных перед построением графика.
Для того чтобы график был понятен и читаем, данные также должны быть правильно отформатированы. Например, если мы строим график временных рядов, необходимо убедиться, что данные представлены в правильной временной последовательности и формате. Также можно добавить подписи к осям и заголовок графика, чтобы визуализация была более информативной.
Иногда график требует агрегирования данных, например, построение суммарной информации по определенным параметрам или группирование данных по категориям. Для этого можно использовать группировку данных по столбцам или создание новых столбцов для агрегирования данных.
Кроме того, важно учитывать особенности данных при выборе типа графика. Например, если мы имеем дело с категориальными данными, то лучше всего использовать столбчатую диаграмму или круговую диаграмму, а для непрерывных данных – линейный график или диаграмму рассеяния.
В целом, подготовка данных для построения графика – это важный этап в процессе визуализации. Правильная обработка и форматирование данных обеспечит читаемость и понятность графика, а также поможет выделить основную информацию для дальнейшего анализа.
Основные шаги построения графика в python
1. Подготовка данных:
Первый шаг в создании графика в python – это подготовка данных. Вам необходимо импортировать библиотеки, которые будут использоваться для построения графика, а также загрузить данные, которые вы хотите отобразить на графике. Вы можете загрузить данные из файла, базы данных или создать их вручную.
2. Создание графика:
После того, как данные подготовлены, вы можете создать график с помощью выбранной библиотеки. В python есть несколько популярных библиотек для построения графиков, таких как Matplotlib, Seaborn, Plotly и другие. Выберите подходящую библиотеку в зависимости от ваших потребностей и предпочтений.
3. Настройка графика:
После того, как график создан, вы можете настроить его внешний вид и добавить дополнительные элементы. Настройте заголовок графика, метки осей, легенду, цвета, шрифты и другие параметры в соответствии с вашими ожиданиями и требованиями. Используйте методы и функции, предоставляемые выбранной библиотекой для настройки графика.
4. Отображение графика:
Последний шаг – отображение графика. В python вы можете отображать графики непосредственно в блокноте Jupyter или сохранять их в файл для последующего использования. Используйте соответствующую функцию или метод выбранной библиотеки для отображения графика на экране или сохранения его в файле. Убедитесь, что ваш график отображается так, как вы задумывали.
Следуя этим основным шагам, вы сможете создать и настроить график в python, отображая ваши данные в удобном и понятном виде. Практикуйтесь, экспериментируйте с различными параметрами и функциями библиотек, и вы сможете создавать потрясающие графики для ваших проектов и исследований.
Типы графиков в matplotlib / plt 3
В прошлых материалах вы встречали примеры, демонстрирующие архитектуру библиотеки matplotlib. После знакомства с основными графическими элементами для графиков время рассмотреть примеры разных типов графиков, начиная с самых распространенных, таких как линейные графики, гистограммы и круговые диаграммы, и заканчивая более сложными, но все равно часто используемыми.
Поскольку визуализация — основная цель библиотеки, то этот раздел является очень важным. Умение выбрать правильный тип графика является фундаментальным навыком, ведь неправильная репрезентация может привести к тому, что данные, полученные в результате качественного анализа данных, будет интерпретированы неверно.
Для выполнения кода импортируйте pyplot и numpy
import matplotlib.pyplot as plt import numpy as np
Линейные графики
Линейные графики являются самыми простыми из всех. Такой график — это последовательность точек данных на линии. Каждая точка состоит из пары значений (x, y), которые перенесены на график в соответствии с масштабами осей (x и y).
В качестве примера можно вывести точки, сгенерированные математической функцией. Возьмем такую: y = sin (3 * x) / x
Таким образом для создания последовательности точек данных нужно создать два массива NumPy. Сначала создадим массив со значениями x для оси x. Для определения последовательности увеличивающихся значений используем функцию np.arrange() . Поскольку функция синусоидальная, то значениями должны быть числа кратные π ( np.pi ). Затем с помощью этой последовательности можно получить значения y, применив для них функцию np.sin() (и все благодаря NumPy).
После этого остается лишь вывести все точки на график с помощью функции plot() . Результатом будет линейный график.
x = np.arange(-2*np.pi,2*np.pi,0.01) y = np.sin(3*x)/x plt.plot(x,y) plt.show()

Этот пример можно расширить для демонстрации семейства функций, например, такого (с разными значениями n ):
x = np.arange(-2*np.pi,2*np.pi,0.01) y = np.sin(3*x)/x y2 = np.sin(2*x)/x y3 = np.sin(x)/x plt.plot(x,y) plt.plot(x,y2) plt.plot(x,y3) plt.show()

Как можно увидеть на изображении, каждой линии автоматически присваивается свой цвет. При этом все графики представлены в одном масштабе. Это значит, что точки данных связаны с одними и теми же осями x и y. Вот почему каждый вызов функции plot() учитывает предыдущие вызовы, так что объект Figure применяет изменения с учетом прошлых команд еще до вывода (для вывода используется show() ).
x = np.arange(-2*np.pi,2*np.pi,0.01) y = np.sin(3*x)/x y2 = np.sin(2*x)/x y3 = np.sin(x)/x plt.plot(x,y,'k--',linewidth=3) plt.plot(x,y2,'m-.') plt.plot(x,y3,color='#87a3cc',linestyle='--') plt.show()

Как уже говорилось в прошлых в разделах, вне зависимости от настроек по умолчанию можно выбрать тип начертания, цвет и так далее. Третьим аргументом функции plot() можно указать коды цветов, типы линий и все этой в одной строке. Также можно использовать два именованных аргумента отдельно: color — для цвета и linestyle — для типа линии.
| Код | Цвет |
|---|---|
| b | голубой |
| g | зеленый |
| r | красный |
| c | сине-зеленый |
| m | пурпурный |
| y | желтый |
| k | черный |
| w | белый |
На графике определен диапазон от — 2π до 2π на оси x, но по умолчанию деления обозначены в числовой форме. Поэтому их нужно заменить на множители числа π. Также можно поменять делители на оси y. Для этого используются функции xticks() и yticks() . Им нужно передать список значений. Первый список содержит значения, соответствующие позициям, где деления будут находиться, а второй — их метки. В этом случае будут использоваться LaTeX-выражения, что нужно для корректного отображения π. Важно не забыть добавить знаки $ в начале и конце, а также символ r в качестве префикса.
x = np.arange(-2*np.pi,2*np.pi,0.01) y = np.sin(3*x)/x y2 = np.sin(2*x)/x y3 = np.sin(x)/x plt.plot(x,y,color='b') plt.plot(x,y2,color='r') plt.plot(x,y3,color='g') plt.xticks([-2*np.pi,-np.pi,0, np.pi, 2*np.pi], [r'$-2\pi$',r'$-\pi$',r'$0$',r'$+\pi$',r'$+2\pi$']) plt.yticks([-1,0,1,2,3], [r'$-1$',r'$0$',r'$+1$',r'$+2$',r'$+3$']) plt.show()

Пока что на всех рассмотренных графиках оси x и y изображались на краях объекта Figure (по границе рамки). Но их же можно провести так, чтобы они пересекались — то есть, получит декартову система координат.
Для этого нужно сперва получить объект Axes с помощью функцию gca . Затем с его помощью можно выбрать любую из четырех сторон, создав область с границами и определив положение каждой: справа, слева, сверху и снизу. Ненужные части обрезаются (справа и снизу), а с помощью функции set_color() задается значение none . Затем стороны, которые соответствуют осям x и y, проходят через начало координат (0, 0) с помощью функции set_position() .
x = np.arange(-2*np.pi,2*np.pi,0.01) y = np.sin(3*x)/x y2 = np.sin(2*x)/x y3 = np.sin(x)/x plt.plot(x,y,color='b') plt.plot(x,y2,color='r') plt.plot(x,y3,color='g') plt.xticks([-2*np.pi,-np.pi,0, np.pi, 2*np.pi], [r'$-2\pi$',r'$-\pi$',r'$0$',r'$+\pi$',r'$+2\pi$']) plt.yticks([-1,0,1,2,3], [r'$-1$',r'$0$',r'$+1$',r'$+2$',r'$+3$']) ax = plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',0)) plt.show()
Теперь график будет состоять из двух пересекающихся в центре осей, который представляет собой начало декартовой системы координат.

Также есть возможность указать на определенную точку с помощью дополнительных обозначений и стрелки. Обозначением может выступать LaTeX-выражение, например, формула предела функции sinx/x , стремящейся к 0.
Для этого в matplotlib есть функция annotate() . Ее настройка кажется сложной, но большое количество kwargs обеспечивает требуемый результат. Первый аргумент — строка, представляющая собой LaTeX-выражение, а все остальные — опциональные. Точка, которую нужно отметить на графике представлена в виде списка, включающего ее координаты (x и y), переданные в аргумент xy . Расстояние заметки до точки определено в xytext , а стрелка — с помощью arrowprops .
x = np.arange(-2*np.pi,2*np.pi,0.01) y = np.sin(3*x)/x y2 = np.sin(2*x)/x y3 = np.sin(x)/x plt.plot(x,y,color='b') plt.plot(x,y2,color='r') plt.plot(x,y3,color='g') plt.xticks([-2*np.pi,-np.pi,0, np.pi, 2*np.pi], [r'$-2\pi$',r'$-\pi$',r'$0$',r'$+\pi$',r'$+2\pi$']) plt.yticks([-1,0,1,2,3], [r'$-1$',r'$0$',r'$+1$',r'$+2$',r'$+3$']) plt.annotate(r'$\lim_\frac= 1$', xy=[0,1],xycoords='data', xytext=[30,30],fontsize=16, textcoords='offset points', arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) ax = plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',0)) plt.show()
В итоге этот код сгенерирует график с математической формулой предела, представленной точкой, на которую указывает стрелка.

Линейные графики с pandas
Рассмотрим более практический и приближенный к анализу данных пример. С ним будет видно, насколько просто использовать библиотеку matplotlib для объектов Dataframe из библиотеки pandas. Визуализация данных в виде линейного графика — максимально простая задача. Достаточно передать объект в качестве аргумента функции plot() для получения графика с несколькими линиями.
import pandas as pd data = 'series1':[1,3,4,3,5], 'series2':[2,4,5,2,4], 'series3':[3,2,3,1,3]> df = pd.DataFrame(data) x = np.arange(5) plt.axis([0,5,0,7]) plt.plot(x,df) plt.legend(data, loc=2) plt.show()

Гистограммы
Гистограмма состоит из примыкающих прямоугольников, расположенных вдоль оси x, которые разбиты на дискретные интервалы, их называют bins . Их площадь пропорциональна частоте конкретного интервала. Такой способ визуализации часто используют в статистике для демонстрации распределения.
Для представления гистограммы в pyplot есть функция hist() . У нее также есть особенности, которых не найти у других функций, отвечающих за создание графиков. hist() не только рисует гистограмму, но также возвращает кортеж значений, представляющих собой результат вычислений гистограммы. Функция hist() может реализовывать вычисление гистограммы, чего достаточно для предоставления набора значений и количества интервалов, на которых их нужно разбить. Наконец hist() отвечает за разделение интервала на множество и вычисление частоты каждого. Результат этой операции не только выводится в графической форме, но и возвращается в виде кортежа.
Для понимания операции лучше всего воспользоваться практическим примером. Сгенерируем набор из 100 случайных чисел от 0 до 100 с помощью random.randint() .
pop = np.random.randint(0,100,100) pop
array([33, 90, 10, 68, 18, 67, 6, 54, 32, 25, 90, 6, 48, 34, 59, 70, 37, 50, 86, 7, 49, 40, 54, 94, 95, 20, 83, 59, 33, 0, 81, 18, 26, 69, 2, 42, 51, 7, 42, 90, 94, 63, 14, 14, 71, 25, 85, 99, 40, 62, 29, 42, 27, 98, 30, 89, 21, 78, 17, 33, 63, 80, 61, 50, 79, 38, 96, 8, 85, 19, 76, 32, 19, 14, 37, 62, 24, 30, 19, 80, 55, 5, 94, 74, 85, 59, 65, 17, 80, 11, 81, 84, 81, 46, 82, 66, 46, 78, 29, 40])
Дальше создаем гистограмму из этих данных, передавая аргумент функции hist() . Например, нужно разделить данные на 20 интервалов (значение по умолчанию — 10 интервалов). Для этого используется именованный аргумент bin .
n, bin, patches = plt.hist(pop, bins=20) plt.show()

Столбчатые диаграммы
Еще один распространенный тип графиков — столбчатые диаграммы. Они похожа на гистограммы, но на оси x тут располагаются не числовые значения, а категории. В matplotlib для реализации столбчатых диаграмм используется функция bin() .
index = [0,1,2,3,4] values = [5,7,3,4,6] plt.bar(index,values) plt.show()
Всего нескольких строк кода достаточно для получения такой столбчатой диаграммы.

На последней диаграмме видно, что метки на оси x написаны под каждым столбцом. Поскольку каждый из них относится к отдельной категории, правильнее обозначать их строками. Для этого используется функция xticks() . А для правильного размещения нужно передать список со значениями позиций в качестве первого аргумента в той же функции. Результатом будет такая диаграмма.
index = np.arange(5) values1 = [5,7,3,4,6] plt.bar(index, values1) plt.xticks(index+0.4,['A','B','C','D','E']) plt.show()

Есть и множество других операций, которые можно выполнить для улучшения диаграммы. Каждая из них выполняется за счет добавления конкретного именованного аргумента в bar() . Например, можно добавить величины стандартного отклонения с помощью аргумента yerr вместе с соответствующими значениями. Часто этот аргумент используется вместе с error_kw , который принимает друге аргументы, отвечающие за представление погрешностей. Два из них — это eColor , который определяет цвета колонок погрешностей и capsize — ширину поперечных линий, обозначающих окончания этих колонок.
Еще один именованный аргумент — alpha . Он определяет степень прозрачности цветной колонки. Его значением может быть число от 0 до 1, где 0 — полностью прозрачный объект.
Также крайне рекомендуется использовать легенду, за которую отвечает аргумент label .
Результат — следующая столбчатая диаграмма с колонками погрешностей.
index = np.arange(5) values1 = [5,7,3,4,6] std1 = [0.8,1,0.4,0.9,1.3] plt.title('A Bar Chart') plt.bar(index, values1, yerr=std1, error_kw='ecolor':'0.1','capsize':6>,alpha=0.7,label='First') plt.xticks(index+0.4,['A','B','C','D','E']) plt.legend(loc=2) plt.show()

Горизонтальные столбчатые диаграммы
В предыдущем разделе столбчатая диаграмма была вертикальной. Но блоки могут располагаться и горизонтально. Для этого режима есть специальная функция barh() . Аргументы и именованные аргументы, которые использовались для bar() будут работать и здесь. Единственное изменение в том, что поменялись роли осей. Категории теперь представлены на оси y, а числовые значения — на x.
index = np.arange(5) values1 = [5,7,3,4,6] std1 = [0.8,1,0.4,0.9,1.3] plt.title('A Horizontal Bar Chart') plt.barh(index, values1, xerr=std1, error_kw='ecolor':'0.1','capsize':6>,alpha=0.7,label='First') plt.yticks(index+0.4,['A','B','C','D','E']) plt.legend(loc=5) plt.show()

Многорядные столбчатые диаграммы
Как и линейные графики, столбчатые диаграммы широко используются для одновременного отображения больших наборов данных. Но в случае с многорядными работает особая структура. До сих пор во всех примерах определялись последовательности индексов, каждый из которых соответствует столбцу, относящемуся к оси x. Индексы представляют собой и категории. В таком случае столбцов, которые относятся к одной и той же категории, даже больше.
Один из способов решения этой проблемы — разделение пространства индекса (для удобства его ширина равна 1) на то количество столбцов, которые к нему относятся. Также рекомендуется добавлять пустое пространство, которое будет выступать пропусками между категориями.
index = np.arange(5) values1 = [5,7,3,4,6] values2 = [6,6,4,5,7] values3 = [5,6,5,4,6] bw = 0.3 plt.axis([0,5,0,8]) plt.title('A Multiseries Bar Chart', fontsize=20) plt.bar(index, values1, bw, color='b') plt.bar(index+bw, values2, bw, color='g') plt.bar(index+2*bw, values3, bw, color='r') plt.xticks(index+1.5*bw,['A','B','C','D','E']) plt.show()

В случае с горизонтальными многорядными столбчатыми диаграммами все работает по тому же принципу. Функцию bar() нужно заменить на соответствующую barh() , а также не забыть заменить xticks() на yticks() . И нужно развернуть диапазон значений на осях с помощью функции axis() .
index = np.arange(5) values1 = [5,7,3,4,6] values2 = [6,6,4,5,7] values3 = [5,6,5,4,6] bw = 0.3 plt.axis([0,8,0,5]) plt.title('A Multiseries Bar Chart', fontsize=20) plt.barh(index, values1, bw, color='b') plt.barh(index+bw, values2, bw, color='g') plt.barh(index+2*bw, values3, bw, color='r') plt.yticks(index+0.4,['A','B','C','D','E']) plt.show()

Многорядные столбчатые диаграммы с Dataframe из pandas
Как и в случае с линейными графиками matplotlib предоставляет возможность представлять объекты Dataframe с результатами анализа данных в форме столбчатых графиков. В этом случае все происходит даже быстрее и проще. Нужно лишь использовать функцию plot() по отношению к объекту Dataframe и указать внутри именованный аргумент kind , ему требуется присвоить тип графика, который будет выводиться. В данном случае это bar . Без дополнительных настроек результат должен выглядеть как на следующем изображении.
import pandas as pd index = np.arange(5) data = 'series1': [1,3,4,3,5], 'series2': [2,4,5,2,4], 'series3': [3,2,3,1,3]> df = pd.DataFrame(data) df.plot(kind='bar') plt.show()

Но для еще большего контроля (или просто при необходимости) можно брать части Dataframe в виде массивов NumPy и описывать их так, как в предыдущем примере. Для этого каждый нужно передать в качестве аргумента функциям matplotlib.
К горизонтальной диаграмме применимы те же правила, но нужно не забыть указать значение barh для аргумента kind . Результатом будет горизонтальная столбчатая диаграмма как на следующем изображении.

Многорядные сложенные столбчатые графики
Еще один способ представления многорядного столбчатого графика — сложенная форма, где каждый столбец установлен поверх другого. Это особенно полезно в том случае, когда нужно показать общее значение суммы всех столбцов.
Для превращения обычного многорядного столбчатого графика в сложенный нужно добавить именованный аргумент bottom в каждую функцию bar() . Каждый объект Series должен быть присвоен соответствующему аргументу bottom . Результатом будет сложенный столбчатый график.
series1 = np.array([3,4,5,3]) series2 = np.array([1,2,2,5]) series3 = np.array([2,3,3,4]) index = np.arange(4) plt.axis([-0.5,3.5,0,15]) plt.title('A Multiseries Stacked Bar Chart') plt.bar(index,series1,color='r') plt.bar(index,series2,color='b',bottom=series1) plt.bar(index,series3,color='g',bottom=(series2+series1)) plt.xticks(index,['Jan18','Feb18','Mar18','Apr18']) plt.show()

Здесь для создания аналогичного горизонтального графика нужно заменить bar() на barh() , не забыв про остальные параметры. Функцию xticks() необходимо поменять местами с yticks() , потому что метки категорий теперь будут расположены по оси y. После этого будет создан следующий горизонтальный график.
series1 = np.array([3,4,5,3]) series2 = np.array([1,2,2,5]) series3 = np.array([2,3,3,4]) index = np.arange(4) plt.axis([0,15,-0.5,3.5]) plt.title('A Multiseries Horizontal Stacked Bar Chart') plt.barh(index,series1,color='r') plt.barh(index,series2,color='b',left=series1) plt.barh(index,series3,color='g',left=(series2+series1)) plt.yticks(index,['Jan18','Feb18','Mar18','Apr18']) plt.show()

До сих пор объекты Series разделялись только по цветам. Но можно использовать, например, разную штриховку. Для этого сперва необходимо сделать цвет столбца белым и использовать именованный аргумент hatch для определения типа штриховки. Все они выполнены с помощью символов ( |, /, -, \, * ), соответствующих стилю столбца. Чем чаще он повторяется, тем теснее будут расположены линии. Так, /// — более плотный вариант чем // , а этот, в свою очередь, плотнее / .
series1 = np.array([3,4,5,3]) series2 = np.array([1,2,2,5]) series3 = np.array([2,3,3,4]) index = np.arange(4) plt.axis([0,15,-0.5,3.5]) plt.title('A Multiseries Horizontal Stacked Bar Chart') plt.barh(index,series1,color='w',hatch='xx') plt.barh(index,series2,color='w',hatch='///',left=series1) plt.barh(index,series3,color='w',hatch='\\\\\\',left=(series2+series1)) plt.yticks(index,['Jan18','Feb18','Mar18','Apr18']) plt.show()

Сложенные столбчатые графики с Dataframe из padans
В случае со сложенными столбчатыми графиками очень легко представлять значения объектов Dataframe с помощью функции plot() . Нужно лишь добавить в качестве аргумента stacked со значением True .
import pandas as pd data = 'series1': [1,3,4,3,5], 'series2': [2,4,5,2,4], 'series3': [3,2,3,1,3]> df = pd.DataFrame(data) df.plot(kind='bar',stacked=True) plt.show()

Другие представления столбчатых графиков
Еще один удобный тип представления данных в столбчатом графике — с использованием двух Series из одних и тех же категорий, где они сравниваются путем размещения друг напротив друга вдоль оси y. Для этого нужно разместить значения y одного из графиков в отрицательной форме. Также в этом примере показано, как поменять внутренний цвет другим способом. Это делается с помощью задания значения для аргумента facecolor .
Также вы увидите, как добавить значение y с меткой в конце каждого столбца. Это поможет улучшить читаемость всего графика. Это делается с помощью цикла for , в котором функция text() показывает значение y. Настроить положение метки можно с помощью именованных аргументов ha и va , которые контролируют горизонтальное и вертикальное выравнивание соответственно. Результатом будет следующий график.
x0 = np.arange(8) y1 = np.array([1,3,4,5,4,3,2,1]) y2 = np.array([1,2,5,4,3,3,2,1]) plt.ylim(-7,7) plt.bar(x0,y1,0.9, facecolor='g') plt.bar(x0,-y2,0.9,facecolor='b') plt.xticks(()) plt.grid(True) for x, y in zip(x0, y1): plt.text(x, y + 0.05, '%d' % y, ha='center', va = 'bottom') for x, y in zip(x0, y2): plt.text(x, -y - 0.05, '%d' % y, ha='center', va = 'top') plt.show()

Круговая диаграмма
Еще один способ представления данных — круговая диаграмма, которую можно получить с помощью функции pie() .
Даже для нее нужно передать основной аргумент, представляющий собой список значений. Пусть это будут проценты (где максимально значение — 100), но это может быть любое значение. А уже сама функция определит, сколько будет занимать каждое значение.
Также в случае с этими графиками есть другие особенности, которые определяются именованными аргументами. Например, если нужно задать последовательность цветов, используется аргумент colors . В таком случае придется присвоить список строк, каждая из которых будет содержать название цвета. Еще одна возможность — добавление меток каждой доле. Для этого есть labels , которой присваивает список строк с метками в последовательности.
А чтобы диаграмма была идеально круглой, необходимо в конце добавить функцию axix() со строкой equal в качестве аргумента. Результатом будет такая диаграмма.
labels = ['Nokia','Samsung','Apple','Lumia'] values = [10,30,45,15] colors = ['yellow','green','red','blue'] plt.pie(values,labels=labels,colors=colors) plt.axis('equal') plt.show()

Чтобы сделать диаграмму более сложной, можно «вытащить» одну из частей. Обычно это делается с целью акцентировать на ней внимание. В этом графике, например, для выделения Nokia. Для этого используется аргумент explode . Он представляет собой всего лишь последовательность чисел с плавающей точкой от 0 до 1, где 1 — положение целиком вне диаграмма, а 0 — полностью внутри. Значение между соответствуют среднему градусу извлечения.
Заголовок добавляется с помощью функции title() . Также можно настроить угол поворота с помощью аргумента startangle , который принимает значение между 0 и 360, обозначающее угол поворота (0 – значение по умолчанию). Следующий график показывает все изменения.
labels = ['Nokia','Samsung','Apple','Lumia'] values = [10,30,45,15] colors = ['yellow','green','red','blue'] explode = [0.3,0,0,0] plt.title('A Pie Chart') plt.pie(values,labels=labels,colors=colors,explode=explode,startangle=180) plt.axis('equal') plt.show()

Но и это не все, что может быть на диаграмме. У нее нет осей, поэтому сложно передать точное разделение. Чтобы решить эту проблему, можно использовать autopct , который добавляет в центр каждой части текст с соответствующим значением.
Чтобы сделать диаграмму еще более привлекательной визуально, можно добавить тень с помощью shadow со значением True . Результат — следующее изображение.
labels = ['Nokia','Samsung','Apple','Lumia'] values = [10,30,45,15] colors = ['yellow','green','red','blue'] explode = [0.3,0,0,0] plt.title('A Pie Chart') plt.pie(values,labels=labels,colors=colors,explode=explode,shadow=True,autopct='%1.1f%%',startangle=180) plt.axis('equal') plt.show()

Круговые диаграммы с Dataframe из pandas
Даже в случае с круговыми диаграммами можно передавать значения из Dataframe. Однако каждая диаграмма будет представлять собой один Series, поэтому в примере изобразим только один объект, выделив его через df[‘series1’] .
Указать тип графика можно с помощью аргумента kind в функции plot() , который в этом случае получит значение pie . Также поскольку он должен быть идеально круглым, обязательно задать figsize . Получится следующая диаграмма.
import pandas as pd data = 'series1': [1,3,4,3,5], 'series2': [2,4,5,2,4], 'series3': [3,2,3,1,3]> df = pd.DataFrame(data) df['series1'].plot(kind='pie', figsize=(6,6)) plt.show()
