Построить графики в Python
Python предоставляет одну из самых популярных библиотек для построения графиков под названием Matplotlib. Это кроссплатформенный проект с открытым исходным кодом для создания 2D-графиков на основе данных в массиве. Обычно он используется для визуализации данных и представлен в виде различных графиков.
Matplotlib изначально задуман Джоном Д. Хантером в 2003 году. Последняя версия matplotlib – 2.2.0, выпущенная в январе 2018 года.
Прежде чем начать работу с библиотекой matplotlib, нам необходимо установить ее в нашей среде Python.
Установка Matplotlib
Введите следующую команду в своем терминале и нажмите клавишу ВВОД.
pip install matplotlib
Приведенная выше команда установит библиотеку matplotlib и ее пакет зависимостей в операционной системе Windows. Разберемся как построить график функции на Python при помощи Matplotlib.
Базовая концепция Matplotlib
График состоит из следующих частей. Давайте разберемся с этими частями.
Figure: это целая фигура, которая может содержать одну или несколько осей(графиков). Мы можем думать о figure как о холсте, на котором хранятся сюжеты.
Axes: фигура может содержать несколько осей. Онf состоит из двух или трех(в случае 3D) объектов Axis. Каждая ось состоит из заголовка, x-метки и y-метки.
Axis: оси – это количество объектов, похожих на линии, которые отвечают за создание пределов графика.
Artist: это все, что мы видим на графике, например, текстовые объекты, объекты Line2D и объекты коллекций. Привязаны к Axes.
Введение в pyplot
Matplotlib предоставляет пакет pyplot, который используется для построения графика заданных данных. Matplotlib.
pyplot – это набор функций командного стиля, которые заставляют matplotlib работать как MATLAB.
Пакет pyplot содержит множество функций, которые используются для создания фигуры, создания ее области построения, дополнения графика метками, проведения некоторых линий в области построения и т. д.
Мы можем быстро построить график с помощью pyplot. Давайте посмотрим на следующий пример.
Базовый пример построения графика
Программа для создания базового примера простого графика следующая:
from matplotlib import pyplot as plt
#ploting our canvas
plt.plot([1,2,3],[4,5,1])
#display the graph
plt.show()
Выход:
Построение графиков разного типа
Мы можем построить различные графики, используя модуль pyplot.
1. Линейный график
Линейный график используется для отображения информации в виде серии линий. Его легко строить.
Пример –
from matplotlib import pyplot as plt
x = [1,2,3]
y = [10,11,12]
plt.plot(x,y)
plt.title(«Line graph»)
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()
Выход:
Линия может быть изменена с помощью различных функций. Это делает график более привлекательным. Ниже приведен пример.
from matplotlib import pyplot as plt
from matplotlib import style
style.use('ggplot')
x = [10, 12, 13]
y = [8, 16, 6]
x2 = [8, 15, 11]
y2 = [6, 15, 7]
plt.plot(x, y, 'b', label='line one', linewidth=5)
plt.plot(x2, y2, 'r', label='line two', linewidth=5)
plt.title('Epic Info')
fig = plt.figure()
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()
2. Столбчатая диаграмма
Одна из наиболее распространенных диаграмм, которая используется для представления данных, связанных с категориальными переменными. Функция bar() принимает три аргумента – категориальные переменные, значения и цвет.
Пример –
from matplotlib import pyplot as plt
Names = ['Arun','James','Ricky','Patrick']
Marks = [51,87,45,67]
plt.bar(Names,Marks,color = 'blue')
plt.title('Result')
plt.xlabel('Names')
plt.ylabel('Marks')
plt.show()
3. Круговая диаграмма
Диаграмма – это круговой график, который разделен на части или сегменты. Он используется для представления процентных или пропорциональных данных, где каждый «кусок пирога» представляет определенную категорию. Давайте разберемся в приведенном ниже примере.
Пример –
from matplotlib import pyplot as plt
# Pie chart, where the slices will be ordered and plotted counter-clockwise:
Aus_Players = 'Smith', 'Finch', 'Warner', 'Lumberchane'
Runs = [42, 32, 18, 24]
explode =(0.1, 0, 0, 0) # it «explode» the 1st slice
fig1, ax1 = plt.subplots()
ax1.pie(Runs, explode=explode, labels=Aus_Players, autopct='%1.1f%%',
shadow=True, startangle=90)
ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()
Выход:
4. Гистограмма
Гистограмма и столбчатая диаграмма очень похожи, но есть небольшая разница. Гистограмма используется для представления распределения, а столбчатая диаграмма используется для сравнения различных объектов. Гистограмма обычно используется для построения графика частоты ряда значений по сравнению с набором диапазонов значений.
В следующем примере мы взяли данные о различных процентах баллов учащегося и построили гистограмму в зависимости от количества учащихся. Давайте разберемся в следующем примере.
Пример –
from matplotlib import pyplot as plt
from matplotlib import pyplot as plt
percentage = [97,54,45,10, 20, 10, 30,97,50,71,40,49,40,74,95,80,65,82,70,65,55,70,75,60,52,44,43,42,45]
number_of_student = [0,10,20,30,40,50,60,70,80,90,100]
plt.hist(percentage, number_of_student, histtype='bar', rwidth=0.8)
plt.xlabel('percentage')
plt.ylabel('Number of people')
plt.title('Histogram')
plt.show()
Выход:
Разберемся еще на одном примере.
Пример – 2:
from matplotlib import pyplot as plt
# Importing Numpy Library
import numpy as np
plt.style.use('fivethirtyeight')
mu = 50
sigma = 7
x = np.random.normal(mu, sigma, size=200)
fig, ax = plt.subplots()
ax.hist(x, 20)
ax.set_title('Historgram')
ax.set_xlabel('bin range')
ax.set_ylabel('frequency')
fig.tight_layout()
plt.show()
Выход:
5. Точечная диаграмма
Данная диаграмма используется для сравнения переменной по отношению к другим переменным. Она определяется как влияние одной переменной на другую. Данные представлены в виде набора точек.
Пример –
from matplotlib import pyplot as plt
from matplotlib import style
style.use('ggplot')
x = [4,8,12]
y = [19,11,7]
x2 = [7,10,12]
y2 = [8,18,24]
plt.scatter(x, y)
plt.scatter(x2, y2, color='g')
plt.title('Epic Info')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()
Выход:
Пример – 2:
import matplotlib.pyplot as plt
a = [2, 2.5, 3, 3.5, 4.5, 4.7, 5.0]
b = [7.5, 8, 8.5, 9, 9.5, 10, 10.5]
a1 = [9, 8.5, 9, 9.5, 10, 10.5, 12]
b1 = [3, 3.5, 4.7, 4, 4.5, 5, 5.2]
plt.scatter(a, b, label='high income low saving', color='b')
plt.scatter(a1, b1, label='low income high savings', color='g')
plt.xlabel('saving*100')
plt.ylabel('income*1000')
plt.title('Scatter Plot')
plt.legend()
plt.show()
Выход:
В этом руководстве мы обсудили все основные типы графиков, которые используются при визуализации данных. Чтобы узнать больше о графике, посетите наш учебник по matplotlib.
Изучаю Python вместе с вами, читаю, собираю и записываю информацию опытных программистов.
Matplotlib. Урок 1. Быстрый старт
Первый урок из цикла, посвященному библиотеке для визуализации данных Matplotlib. В рамках данного урока будут рассмотрены такие вопросы как: установка библиотеки, построение линейного графика, несколько графиков на одном и на разных полях, построение диаграммы для категориальных данных и обзор основных элементов графика.
Установка
Варианты установки Matplotlib
Существует два основных варианта установки этой библиотеки: в первом случае вы устанавливаете пакет Anaconda, в состав которого входит большое количество различных инструментов для работы в области машинного обучения и анализа данных (и не только); во втором – установить Matplotlib самостоятельно, используя менеджер пакетов. Про установку Anaconda вы можете прочитать в статье Python. Урок 1. Установка.
Установка Matplotlib через менеджер pip
Второй вариант – это воспользоваться менеджером pip и установить Matplotlib самостоятельно, для этого введите в командной строке вашей операционной системы следующие команды:
>python -m pip install -U pip
>python -m pip install -U matplotlib
Первая из них обновит ваш pip, вторая установит matplotlib со всеми необходимыми зависимостями.
Проверка установки
Для проверки того, что все у вас установилось правильно, запустите интерпретатор Python и введите в нем следующее:
>>> import matplotlib
После этого можете проверить версию библиотеки (она скорее всего будет отличаться от приведенной ниже):
>>> matplotlib.__version__
'3.0.3'
Быстрый старт
Перед тем как углубиться в дебри библиотеки Matplotlib, для того, чтобы появилось интуитивное понимание принципов работы с этим инструментом, рассмотрим несколько примеров, изучив которые вы уже сможете использовать библиотеку для решения своих задач.
Если вы работаете в Jupyter Notebook для того, чтобы получать графики рядом с ячейками с кодом необходимо выполнить специальную magic команду после того, как импортируете matplotlib::
import matplotlib.pyplot as plt
%matplotlib inline
Результат работы выглядеть будет так, как показано на рисунке ниже.
Если вы пишете код в .py файле, а потом запускаете его через вызов интерпретатора Python, то строка %matplotlib inline вам не нужна, используйте только импорт библиотеки.
Пример, аналогичный тому, что представлен на рисунке выше, для отдельного Python файла будет выглядеть так:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
plt.show()
В результате получите график в отдельном окне.
Далее мы не будем останавливаться на особенностях использования magic команды, просто запомните, если вы используете Jupyter notebook при работе с Matplotlib вам обязательно нужно включить %matplotlib inline.
Теперь перейдем непосредственно к Matplotlib. Задача урока “Быстрый старт” – это построить разные типы графиков, настроить их внешний вид и освоиться в работе с этим инструментом.
Построение графика
Для начал построим простую линейную зависимость, дадим нашему графику название, подпишем оси и отобразим сетку. Код программы:
import numpy as np
# Независимая (x) и зависимая (y) переменные
x = np.linspace(0, 10, 50)
y = x
# Построение графика
plt.title(«Линейная зависимость y = x») # заголовок
plt.xlabel(«x») # ось абсцисс
plt.ylabel(«y») # ось ординат
plt.grid() # включение отображение сетки
plt.plot(x, y) # построение графика
В результате получим следующий график:
Изменим тип линии и ее цвет, для этого в функцию plot(), в качестве третьего параметра передадим строку, сформированную определенным образом, в нашем случае это “r–”, где “r” означает красный цвет, а “–” – тип линии – пунктирная линия. Более подробно о том, как задавать цвет и какие типы линии можно использовать будет рассказано с одной из следующих глав.
# Построение графика
plt.title(«Линейная зависимость y = x») # заголовок
plt.xlabel(«x») # ось абсцисс
plt.ylabel(«y») # ось ординат
plt.grid() # включение отображение сетки
plt.plot(x, y, «r—«) # построение графика
Несколько графиков на одном поле
Построим несколько графиков на одном поле, для этого добавим квадратичную зависимость:
# Линейная зависимость
x = np.linspace(0, 10, 50)
y1 = x
# Квадратичная зависимость
y2 = [i**2 for i in x]
# Построение графика
plt.title(«Зависимости: y1 = x, y2 = x^2») # заголовок
plt.xlabel(«x») # ось абсцисс
plt.ylabel(«y1, y2») # ось ординат
plt.grid() # включение отображение сетки
plt.plot(x, y1, x, y2) # построение графика
В приведенном примере в функцию plot() последовательно передаются два массива для построения первого графика и два массива для построения второго, при этом, как вы можете заметить, для обоих графиков массив значений независимой переменной x один и то же.
Несколько разделенных полей с графиками
Третья, довольно часто встречающаяся задача – это отобразить два или более различных поля, на которых будет отображено по одному или более графику.
Построим уже известные нам две зависимость на разных полях.
# Линейная зависимость
x = np.linspace(0, 10, 50)
y1 = x
# Квадратичная зависимость
y2 = [i**2 for i in x]
# Построение графиков
plt.figure(figsize=(9, 9))
plt.subplot(2, 1, 1)
plt.plot(x, y1) # построение графика
plt.title(«Зависимости: y1 = x, y2 = x^2») # заголовок
plt.ylabel(«y1», fontsize=14) # ось ординат
plt.grid(True) # включение отображение сетки
plt.subplot(2, 1, 2)
plt.plot(x, y2) # построение графика
plt.xlabel(«x», fontsize=14) # ось абсцисс
plt.ylabel(«y2», fontsize=14) # ось ординат
plt.grid(True) # включение отображение сетки
Здесь мы воспользовались новыми функциями:
figure() – функция для задания глобальных параметров отображения графиков. В нее, в качестве аргумента, мы передаем кортеж, определяющий размер общего поля.
subplot() – функция для задания местоположения поля с графиком. Существует несколько способов задания областей для вывода через функцию subplot() мы воспользовались следующим: первый аргумент – количество строк, второй – столбцов в формируемом поле, третий – индекс (номер поля, считаем сверху вниз, слева направо).
Остальные функции уже вам знакомы, дополнительно мы использовали параметр fontsize для функций xlabel() и ylabel(), для задания размера шрифта.
Построение диаграммы для категориальных данных
До этого мы строили графики по численным данным, т.е. зависимая и независимая переменные имели числовой тип. На практике довольно часто приходится работать с данными нечисловой природы – имена людей, название фруктов, и т.п.
Построим диаграмму на которой будет отображаться количество фруктов в магазине:
fruits = [«apple», «peach», «orange», «bannana», «melon»]
counts = [34, 25, 43, 31, 17]
plt.bar(fruits, counts)
plt.title(«Fruits!»)
plt.xlabel(«Fruit»)
plt.ylabel(«Count»)
Для вывода диаграммы мы использовали функцию bar().
К этому моменту, если вы самостоятельно попробовали запустить приведенные выше примеры, у вас уже должно сформировать некоторое понимание того, как осуществляется работа с этой библиотекой.
Основные элементы графика
Рассмотрим основные термины и понятия, касающиеся изображения графика, с которыми вам необходимо будет познакомиться, для того, чтобы в дальнейшем у вас не было трудностей при прочтении материалов из этого цикла статей и документации по библиотеке matplotlib.
Корневым элементом при построения графиков в системе Matplotlib является Фигура (Figure). Все, что нарисовано на рисунке выше является элементами фигуры. Рассмотрим ее составляющие более подробно.
График
На рисунке представлены два графика – линейный и точечный. Matplotlib предоставляет огромное количество различных настроек, которые можно использовать для того, чтобы придать графику вид, который вам нужен: цвет, толщина и тип линии, стиль линии и многое другое, все это мы рассмотрим в ближайших статьях.
Оси
Вторым, после непосредственно самого графика, по важности элементом фигуры являются оси. Для каждой оси можно задать метку (подпись), основные (major) и дополнительные (minor) тики, их подписи, размер и толщину, также можно задать диапазоны по каждой из осей.
Сетка и легенда
Следующими элементами фигуры, которые значительно повышают информативность графика являются сетка и легенда. Сетка также может быть основной (major) и дополнительной (minor). Каждому типу сетки можно задавать цвет, толщину линии и тип. Для отображения сетки и легенды используются соответствующие команды.
Ниже представлен код, с помощью которого была построена фигура, изображенная на рисунке:
import matplotlib.pyplot as plt
from matplotlib.ticker import (MultipleLocator, FormatStrFormatter,
AutoMinorLocator)
import numpy as np
x = np.linspace(0, 10, 10)
y1 = 4*x
y2 = [i**2 for i in x]
fig, ax = plt.subplots(figsize=(8, 6))
ax.set_title(«Графики зависимостей: y1=4*x, y2=x^2», fontsize=16)
ax.set_xlabel(«x», fontsize=14)
ax.set_ylabel(«y1, y2″, fontsize=14)
ax.grid(which=»major», linewidth=1.2)
ax.grid(which=»minor», linestyle=»—«, color=»gray», linewidth=0.5)
ax.scatter(x, y1, c=»red», label=»y1 = 4*x»)
ax.plot(x, y2, label=»y2 = x^2″)
ax.legend()
ax.xaxis.set_minor_locator(AutoMinorLocator())
ax.yaxis.set_minor_locator(AutoMinorLocator())
ax.tick_params(which='major', length=10, width=2)
ax.tick_params(which='minor', length=5, width=1)
plt.show()
Если в данный момент вам многое кажется непонятным – не переживайте, далее мы разберем подробно особенности настройки и использования всех элементов представленных на поле с графиками.
P.S.
Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта. Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками.
Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Построение графиков функций на python
В статье научимся строить графики функций на python с помощью модуля matplotlib.
График функции — множество всех точек координатной плоскости, абсциссы которых равны значениям аргумента, а ординаты — соответствующим значениям функции.
Установка модулей
Первым делом нужно установить модули matplotlib и numpy. Для этого в терминале прописываем:
Построение графиков
После установки нужных модулей импортируем их в проекте:
import matplotlib.pyplot as plt
import numpy as np
Построение прямой
Для начала построим график прямой используя функцию y = x:
import matplotlib.pyplot as plt
import numpy as np
# Создаём экземпляр класса figure и добавляем к Figure область Axes
fig, ax = plt.subplots()
# Добавим заголовок графика
ax.set_title('График функции')
# Название оси X:
ax.set_xlabel('x')
# Название оси Y:
ax.set_ylabel('y')
# Начало и конец изменения значения X, разбитое на 100 точек
x = np.linspace(0, 5, 100) # X от 0 до 5
# Построение прямой
y = x
# Вывод графика
ax.plot(x, y)
plt.show()
Построение параболы
Построим график параболы используя функцию y = x^2:
import matplotlib.pyplot as plt
import numpy as np
# Создаём экземпляр класса figure и добавляем к Figure область Axes
fig, ax = plt.subplots()
# Добавим заголовок графика
ax.set_title('График функции')
# Название оси X:
ax.set_xlabel('x')
# Название оси Y:
ax.set_ylabel('y')
# Начало и конец изменения значения X, разбитое на 100 точек
x = np.linspace(-5, 5, 100) # X от -5 до 5
# Построение прямой
y = x**2
# Вывод графика
ax.plot(x, y)
plt.show()
Построение гиперболы
Построим график гиперболы используя функцию y = 1 / x:
import matplotlib.pyplot as plt
import numpy as np
# Создаём экземпляр класса figure и добавляем к Figure область Axes
fig, ax = plt.subplots()
# Добавим заголовок графика
ax.set_title('График функции')
# Название оси X:
ax.set_xlabel('x')
# Название оси Y:
ax.set_ylabel('y')
# Начало и конец изменения значения X, разбитое на 100 точек
x = np.linspace(-5, 5, 100) # X от -5 до 5
# Построение прямой
y = y = 1 / x
# Вывод графика
ax.plot(x, y)
plt.show()
Построение гиперболы
Построим график экспоненты используя функцию y = e^x:
import matplotlib.pyplot as plt
import numpy as np
# Создаём экземпляр класса figure и добавляем к Figure область Axes
fig, ax = plt.subplots()
# Добавим заголовок графика
ax.set_title('График функции')
# Название оси X:
ax.set_xlabel('x')
# Название оси Y:
ax.set_ylabel('y')
# Начало и конец изменения значения X, разбитое на 100 точек
x = np.linspace(-5, 5, 100) # X от -5 до 5
# Построение прямой
y = np.exp(x)
# Вывод графика
ax.plot(x, y)
plt.show()
Заключение
В данной статье мы с Вами научились строить графики функции с помощью python и модуля matplotlib.
Спасибо всем, кто читал, удачи Вам ????
Вам также может понравиться
Визуализация данных в Matplotlib
11 ноября 2016 г.
Matplotlib — библиотека на языке программирования Python для визуализации данных двумерной (2D) графикой (3D графика также поддерживается). Получаемые изображения могут быть использованы в качестве иллюстраций в публикациях[4].
Matplotlib написан и поддерживался в основном Джоном Хантером (англ. John Hunter) и распространяется на условиях BSD-подобной лицензии.
Генерируемые в различных форматах изображения могут быть использованы в интерактивной графике, в научных публикациях, графическом интерфейсе пользователя, веб-приложениях, где требуется построение диаграмм (англ. plotting)[5][6].
В документации автор признаётся, что Matplotlib начинался с подражания графическим командам MATLAB, но является независимым от него проектом
Веб-сайт: http://matplotlib.org/
Установка
Для установки используйте пакетный менеджер:
conda install matplotlib
или
pip install matplotlib
Импорт
import matplotlib.pyplot as plt
Для отображения графиков в notebook'е введите
Благодаря этой строчке все графики будут выводиться в векторном формате svg:
%config InlineBackend.figure_format = 'svg'
Для отображения графиков в отрыве от jupyter notebook используйте plt.show() после всех команд для вывода графиков.
В отличии от pandas, matplotlib может строить графики из обычных списков или массивов numpy.
** Создадим массив numpy:**
import numpy as np
x = np.linspace(0, 5, 11)
y = x**2 array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. ]) array([ 0. , 0.25, 1. , 2.25, 4. , 6.25, 9. , 12.25, 16. ,
20.25, 25. ]) plt.plot(x, y, 'r') plt.xlabel('Ось X')
plt.ylabel('Ось Y')
plt.title('Заголовок графика')
plt.show();
plt.subplot(1, 2, 1)
plt.plot(x, y, 'r—') plt.subplot(1, 2, 2)
plt.plot(y, x, 'g*-');
fig = plt.figure() axes = fig.add_axes([0.1, 0.1, 0.8, 0.8]) axes.plot(x, y, 'b')
axes.set_xlabel('Ось X') axes.set_ylabel('И ось Y')
axes.set_title('Заголовок все там же');
Теперь мы имеем полный контроль над осями графика:
fig = plt.figure() axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
axes2 = fig.add_axes([0.2, 0.5, 0.4, 0.3]) axes1.plot(x, y, 'b')
axes1.set_xlabel('Подпись оси X большого графика')
axes1.set_ylabel('Подпись оси Y большого графика')
axes1.set_title('Заголовок большого графика') axes2.plot(y, x, 'r')
axes2.set_xlabel('Подпись оси X
малого графика')
axes2.set_ylabel('Подпись оси Y
малого графика')
axes2.set_title('Заголовок малого графика');
То же, что и plt.figure(), только возвращяет сразу кортеж с фигурой и осями:
fig, axes = plt.subplots() axes.plot(x, y, 'r')
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('Заголовок') Text(0.5, 1.0, 'Заголовок')
Если указать количество строк и столбцов, можно создать несколько графиков.
fig, axes = plt.subplots(nrows=1, ncols=2) array([,
],
dtype=object)
We can iterate through this array:
for ax in axes: ax.plot(x, y, 'b') ax.set_xlabel('x') ax.set_ylabel('y') ax.set_title('Заголовок') fig
При построении несколько графиков оси часто накладываются друг на друга. Для утранения этой проблемы используйте методы fig.tight_layout() или plt.tight_layout():
fig, axes = plt.subplots(nrows=1, ncols=2) for ax in axes: ax.plot(x, y, 'g') ax.set_xlabel('x') ax.set_ylabel('y') ax.set_title('Заголовок') fig plt.tight_layout()
Matplotlib позволяет задавать размер сторон графика и DPI при созданни фигуры. Для этого используйте следующие именованные аргументы:
- figsize принимает кортеж и двух чисел — ширины и высоты графика в дюймах.
- dpi — dots-per-inch.
Например:
fig = plt.figure(figsize=(8,4), dpi=100)
То же самое можно передать в subplots.
fig, axes = plt.subplots(figsize=(12,3), dpi=300) axes.plot(x, y, 'r')
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('Заголовок');
Можно сохранять графики в форматах PNG, JPG, EPS, SVG, PGF и PDF.
Для сохранения графика надо использовать метод savefig класса Figure:
fig.savefig(«filename.png», dpi=200) ax.set_title(«Заголовок»); ax.set_xlabel(«x»)
ax.set_ylabel(«y»);
При построении графиков можно указывать аргумент label=»label text», и указанные в нем подписи будут отображаться как подписи легенд и использовании метода legend:
fig = plt.figure() ax = fig.add_axes([0,0,1,1]) ax.plot(x, x**2, label=»x**2″)
ax.plot(x, x**3, label=»x**3″) ax.legend();
Легенду можно располагать в различных местах графиков, подробнее в документации.
ax.legend(loc=1) ax.legend(loc=2) ax.legend(loc=3) ax.legend(loc=4) ax.legend(loc=0) fig fig, ax = plt.subplots()
ax.plot(x, x**2, 'b.-') ax.plot(x, x**3, 'g—'); fig, ax = plt.subplots() ax.plot(x, x+1, color=»blue», alpha=0.5) ax.plot(x, x+2, color=»#8B008B») ax.plot(x, x+3, color=»#FF8C00″);
Для изменения толщины линии используется ключевое слово linewidth или lw. Стиль линии задаётся аргументами linestyle или ls:
fig, ax = plt.subplots(figsize=(12,6)) ax.plot(x, x+1, color=»red», linewidth=0.25)
ax.plot(x, x+2, color=»red», linewidth=0.50)
ax.plot(x, x+3, color=»red», linewidth=1.00)
ax.plot(x, x+4, color=»red», linewidth=2.00) ax.plot(x, x+5, color=»green», lw=3, linestyle='-')
ax.plot(x, x+6, color=»green», lw=3, ls='-.')
ax.plot(x, x+7, color=»green», lw=3, ls=':') line, = ax.plot(x, x+8, color=»black», lw=1.50)
line.set_dashes([5, 10, 15, 10]) ax.plot(x, x+ 9, color=»blue», lw=3, ls='-', marker='+')
ax.plot(x, x+10, color=»blue», lw=3, ls='—', marker='o')
ax.plot(x, x+11, color=»blue», lw=3, ls='-', marker='s')
ax.plot(x, x+12, color=»blue», lw=3, ls='—', marker='1') ax.plot(x, x+13, color=»purple», lw=1, ls='-', marker='o', markersize=2)
ax.plot(x, x+14, color=»purple», lw=1, ls='-', marker='o', markersize=4)
ax.plot(x, x+15, color=»purple», lw=1, ls='-', marker='o', markersize=8, markerfacecolor=»red»)
ax.plot(x, x+16, color=»purple», lw=1, ls='-', marker='s', markersize=8, markerfacecolor=»yellow», markeredgewidth=3, markeredgecolor=»green»);
Диапазон можно изменять при помощи методов set_ylim, set_xlim и axis('tight') :
fig, axes = plt.subplots(1, 3, figsize=(12, 4)) axes[0].plot(x, x**2, x, x**3)
axes[0].set_title(«Стандартный диапазон осей») axes[1].plot(x, x**2, x, x**3)
axes[1].axis('tight')
axes[1].set_title(««Тесные» оси») axes[2].plot(x, x**2, x, x**3)
axes[2].set_ylim([0, 60])
axes[2].set_xlim([2, 5])
axes[2].set_title(«Заданный точными значениями
диапазон осей»);
При помощи matplotlib можно создавать барплоты, гистограммы, точечные диаграммы и много ещё чего. Намного проще создавать из с использованием seaborn, но можно обойтись и чистым matplotlib:
from random import sample
data = sample(range(1, 1000), 100)
plt.hist(data); data = [np.random.normal(0, std, 100) for std in range(1, 4)] plt.boxplot(data,vert=True,patch_artist=True);
Загрузим необходимые библиотеки и подготовим данные:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline x = np.arange(0,100)
y = x*2
z = x**2
** Выполните следующие шаги: **
- ** Создайте объект класса Figure используя метод plt.figure() **
- ** Используйте add_axes чтобы добавить оси, занимающие все полотно фигуры.**
- ** Изобразите на полученном графике связь между x и y, чтобы получился похожий результат:**
Советую выполнять Ваш код в отдельной ячейке, для того, чтобы не стереть образец.
Text(0.5, 1.0, 'Заголовок')
Создайте на одном полотне две пары осей, чтобы получилась похожая картинка:
Визуализируйте данные на каждой паре осей
Напишите код, чтобы получить похожие графики:
Создание визуализаций в Python
Пора перейти от теории визуализации данных к практике.
https://www.youtube.com/watch?v=ELFPpTzxNu8\u0026pp=ygUr0J_QvtGB0YLRgNC-0LjRgtGMINCz0YDQsNGE0LjQutC4INCyIFB5dGhvbg%3D%3D
В этом параграфе мы с помощью Python научимся создавать графики, о которых говорили в предыдущем параграфе, — гистограммы, столбчатые диаграммы, точечные диаграммы и другие. Но для этого нам сперва нужно сказать пару слов о библиотеке matplotlib.
Общие принципы matplotlib
В Python существует множество библиотек для визуализации данных, однако базовой и одной из самых распространённых является библиотека matplotlib. С её помощью мы разберём базовые типы визуализаций.
Библиотека matplotlib устанавливается и импортируется так же, как и другие библиотеки:
import matplotlib.pyplot as plt
Для иллюстрации работы библиотеки matplotlib мы будем использовать датасет с информацией о контенте стриминговой платформы Disney+.
Создание визуализаций можно представить как последовательное добавление различных элементов итогового графика:
- пустого графика с осями;
- элементов, отображающих переменные;
- подписей;
- цвета и стиля.
Гистограммы
Напомним, что гистограммы — такой вид визуализаций, где рассматривается распределение значений по одному параметру. Например, мы можем посмотреть, каким было распределение значений по году производства фильма или шоу.
import pandas as pd
df = pd.read_csv('disney_plus_titles.csv')
plt.hist(df['release_year'])
plt.show()
По оси X указан год производства, а по оси Y — количество фильмов, произведённых в этот год. Как видно из этого графика, производство фильмов начало расти после восьмидесятых, причём после начала нулевых производство фильмов резко увеличилось.
Столбцы на получившейся гистограмме довольно широкие, что позволяет нам довольно примерно оценить соотношение года и количества произведённых фильмов. Однако это регулируемый параметр. По умолчанию он равен 10, но давайте удвоим количество столбцов (иначе их называют корзинами):
plt.hist(df['release_year'], bins=20)
plt.show()
Мы добавили параметр функции bins. Именно он отвечает за количество столбцов. Конечно, это не единственный параметр, с помощью которого мы настраиваем способ отображения данных, по ходу этого параграфа мы увидим и другие.
Помимо этого, мы можем добавить на график сразу несколько разных данных. Предположим, мы хотим одновременно посмотреть на гистограммы фильмов и ТВ-шоу. Для этого сделаем отдельные наборы данных:
df_film = df[df['type'] == 'Movie']
df_show = df[df['type'] == 'TV Show']
Теперь добавим интересующие нас данные на график:
plt.hist(df_film['release_year'])
plt.hist(df_show['release_year'])
plt.show()
Обратите внимание на интересную вещь. Мы рисуем две гистограммы, но видим их не отдельно, а вместе. Дело в том, что если мы определяем две гистограммы подряд, то пакет интерпретирует это как предложение нарисовать их поверх друг друга. Это может быть полезным.
С помощью такой визуализации мы можем увидеть, как менялись темпы производства фильмов и шоу. Однако эта визуализация будет не вполне понятна для аудитории: что именно изображено на графике? Что отражает график синего и оранжевого цвета? Эти вопросы стоит прояснить, поэтому мы добавим текстовые объяснения на график.
plt.hist(df_film['release_year'], label = 'Films')
plt.hist (df_show['release_year'], label = 'Shows')
plt.legend()
plt.show()
Давайте разберём, что мы добавили на график:
- label — с помощью этого параметра мы добавили подписи к гистограммам;
- legend — с помощью этого аргумента мы выводим на график подписи к данным к ним — это не только названия данных, но и, например, названия осей и графика в целом.
Посмотрим, как добавить эти названия тоже.
plt.hist(df_film['release_year'], label = 'Films', bins = 20)
plt.hist(df_show['release_year'], label = 'Shows', bins = 20)
plt.xlabel(«Year»)
plt.ylabel(«amount»)
plt.title('Hist #1')
plt.legend()
plt.show()
К нашему коду мы добавили строки, которые задают названия осей и графика в целом. Посмотрим теперь, как работать с категориальными переменными.
Столбчатые диаграммы
Для визуализации категориальных переменных мы будем использовать столбчатые диаграммы. Они могут внешне напоминать гистограммы, но сильно отличаются по смыслу, в первую очередь как раз тем, что используются при работе с категориальными шкалами.
https://www.youtube.com/watch?v=ELFPpTzxNu8\u0026pp=YAHIAQE%3D
Для начала посмотрим, какие возрастные категории фильмов и шоу были самыми распространёнными. В нашем наборе данных есть переменная Rating, которая отражает, какой именно возрастной рейтинг был присвоен каждому фильму и шоу. Для начала посмотрим на эти данные без визуализации. Напомним, что для этого можно использовать функцию value_counts():
df['rating'].value_counts()
TV-G 318
TV-PG 301
G 253
PG 236
TV-Y7 131
TV-14 79
PG-13 66
TV-Y 50
TV-Y7-FV 13
Name: rating, dtype: int64
Так мы можем понять наиболее и наименее распространённые рейтинги. В кодбуке к набору данных (или просто в интернете) можно узнать, чему соответствует каждый рейтинг. Например, TV-G означает, что фильм подходит для всех возрастных категорий. Однако теперь попробуем визуализировать эти данные.
Для этого мы будем использовать следующую запись:
df['rating'].value_counts().plot(kind='bar', ylabel='frequency')
plt.show()
Несколько пояснений по этому коду, поскольку такой вид записи отличается от тех, что мы рассматривали ранее. Раз мы используем преобразованные данные, то код устроен следующим образом:
- сначала мы проделываем работу с данными — это первая часть кода;
- затем используем функцию plot() — она указывает, что полученные данные необходимо визуализировать;
- параметры этой функции задают способ визуализации и дополнительные параметры, в нашем случае — тип графика и подпись к оси Y.
Вот ещё возможные значения параметра kind:
- line — линейный график;
- hist — гистограмма;
- box — бокс-плот;
- pie — круговая диаграмма;
- kde — линия плотности распределения;
- density — гибрид линейного графика и гистограммы;
- scatter — точечная диаграмма;
В итоге получаем количество фильмов и шоу по возрастным категориям:
Мы можем отдельно оценить количество фильмов и ТВ-шоу по категориям. Опять же, начнём с кода, который покажет нам такие данные:
df.groupby('type')['rating'].value_counts()
type rating
Movie G 253 PG 235 TV-G 233 TV-PG 181 PG-13 66 TV-14 37 TV-Y7 36 TV-Y7-FV 7 TV-Y 3
TV Show TV-PG 120 TV-Y7 95 TV-G 85 TV-Y 47 TV-14 42 TV-Y7-FV 6 PG 1
Name: rating, dtype: int64
Тут вас может смутить синтаксис, расскажем о нём чуть подробнее:
- на объекте df вызываем метод groupby, передав в качестве параметра аргумент type — этот метод группирует датафрейм по переменной type;
- он возвращает новый объект — сгруппированный датафрейм;
- у него выбираем все значения по переменной rating;
- и подсчитываем количество наблюдений для каждого уникального значения.
Полученные данные уже сложнее воспринимать. Рассмотрим код для визуализации этих данных:
vis_1 = df.groupby('type')['rating'].value_counts()
vis_1.unstack(0).plot(kind='bar', ylabel='frequency')
Первой строкой мы сохранили данные в преобразованном виде.
Второй строкой мы задали параметры визуализации. Все его части нам знакомы, кроме функции unstack. Она нужна для того, чтобы на визуализации объединить под одной категорией и фильмы, и ТВ-шоу. Чтобы лучше понять принцип работы этой функции, вы можете удалить эту часть кода и попробовать визуализировать без неё. В текущем же виде мы получим вот такую визуализацию:
Глядя на эту визуализацию, можно обнаружить, что, хотя в большинстве категорий фильмы преобладают над ТВ-шоу, есть несколько категорий, где ситуация радикально иная.
Линейные графики нужны нам, когда мы визуализируем количественные показатели и их связь между собой. В нашем наборе данных один из таких показателей — это год производства фильма. Однако все остальные показатели — категориальные, поэтому нам необходимо выполнить некоторые преобразования. Например, мы можем посчитать, какое количество фильмов было произведено в каждый год.
Для этого используем следующий код:
df['release_year'].value_counts()
2021 125
2020 114
2019 99
2017 69
2018 65 …
1944 1
1945 1
1970 1
1968 1
1928 1
Name: release_year, Length: 90, dtype: int64
Так мы узнали, сколько фильмов было произведено в каждый год. Теперь визуализируем это соотношение. Чтобы это сделать, нам необходимо ещё одно преобразование — связь года и количества произведённых фильмов необходимо сохранить как датафрейм.
film_year = pd.DataFrame(df['release_year'].value_counts().reset_index().values, columns=[«Year», «amount»])
film_year = film_year.sort_values('Year', ascending = True)
print(film_year) Year amount
89 1928 1
74 1932 3
73 1933 3
56 1934 4
57 1935 4
.. … …
3 2017 69
4 2018 65
2 2019 99
1 2020 114
0 2021 125 [90 rows x 2 columns]
Этим кодом мы создали первой строкой датафрейм с колонками “Year” и “amount”, а второй строкой отсортировали его по годам. Дальнейшая визуализация будет очень простой:
plt.plot(film_year['Year'], film_year['amount'])
plt.show()
Простой, но отчётливо наблюдаемый тренд — это увеличение производства фильмов и ТВ-шоу от года к году.
Точечная диаграмма
Точечная диаграмма нужна нам для визуализации двух переменных и, как мы уже видели в предыдущем параграфе, часто используется при работе с корреляциями.
В нашем наборе данных есть две подходящие переменные: год производства и длительность фильма.
Однако длительность фильма изначально представлена как строка, поскольку содержит не только данные о количестве минут или сезонов, но и текст. Это не подходит для наших задач, поэтому мы преобразуем переменную.
Мы не будем подробно разбирать, как именно это сделать в Python, однако код для этой операции выглядит следующим образом:
df['duration'] = df['duration'].replace('min' or 'Season', '', regex=True).apply(pd.to_numeric, errors='coerce')
df_2 = df[df['duration'] > 15]
Мы убрали текст из колонки и превратили строки в числа, а затем исключили значения меньше 15, чтобы убрать данные, касающиеся сезонов, а не фильмов.
plt.scatter(df_2['release_year'], df_2['duration'], alpha=0.5)
plt.show()
Код выглядит очень просто. Мы указываем тип визуализации, переменные по шкале X и Y, а также для прозрачности показатель alpha, с которым мы уже сталкивались.
По этой визуализации сложно однозначно сказать, изменилась ли значимо средняя длина фильмов за указанный период, однако она позволяет нам увидеть сразу на одной картинке связь между годом и длительностью фильма. В ряде случаев такие визуализации оказываются полезны для отражения зависимостей различных переменных.
Давайте коротко повторим, что мы узнали в главе 5:
- из каких элементов состоят графики и как их оформлять;
- как выбирать подходящий тип графика для наших задач;
- как создавать графики в Python с помощью библиотеки matplotlib.
Вы хорошо поработали! А новые знания сделают ваши исследования ещё убедительнее.
В следующей главе мы узнаем, как работать с опросными данными и как правильно сокращать объём данных, не теряя сути.