popov . dev

Main

Library

Articles

Python Matplotli...

Python Matplotlib: руководство по библиотеке с примерами

В предыдущих наших публикациях вы познакомились с библиотеками Python NumPy, Pandas. Их объединяет то, что они являются неотъемлемым инструментом специалистов DataScience, аналитиков данных и помогают статистам в их повседневной работе. Сегодня мы рассмотрим не менее важный инструмент, библиотеку Python Matplotlib, необходимую для построения графиков на основе полученных данных.

Что такое Python Matplotlib?

matplotlib.pyplot - это библиотека построения графиков, используемая для 2D-графики на языке программирования python. Ее можно использовать в скриптах python, командной оболочке, серверах веб-приложений и других инструментах графического интерфейса пользователя.

Доступно несколько наборов инструментов, расширяющих функциональность python matplotlib. Некоторые из них загружаются отдельно, другие могут поставляться с исходным кодом matplotlib, но имеют внешние зависимости.

  • Basemap: инструментарий для построения карт с различными картографическими проекциями, береговыми линиями и политическими границами.
  • Cartopy: картографическая библиотека с объектно-ориентированными определениями картографической проекции и возможностями преобразования произвольных точек, линий, полигонов и изображений.
  • Инструменты Excel: Matplotlib предоставляет утилиты для обмена данными с Microsoft Excel.
  • Mplot3d: используется для создания трехмерных графиков.
  • Natgrid: интерфейс к библиотеке natgrid для нерегулярной привязки к сетке разнесенных данных.

Далее, давайте продолжим этот блог и рассмотрим различные типы графиков, доступных в python matplotlib.

Типы графиков

Существуют различные графики, которые можно создать с помощью python matplotlib. Некоторые из них перечислены ниже:

Рассмотрим подробно каждый из них.

Перед тем как начать, расмотрим простой пример использования matplotlib, для генерации простого графика. Всего три строчки кода и мы имеем перед собой первый график.

from matplotlib import pyplot as plt

# Вставка графика
plt.plot([1,2,3],[4,5,1])

# Отображение графика
plt.show()

Вывод

Давайте посмотрим, как мы можем добавить заголовок и метки к нашему графику, созданному с помощью библиотеки python matplotlib, чтобы придать ему больше смысла. Рассмотрим пример ниже:

from matplotlib import pyplot as plt
 
x = [5,2,7]
y = [2,16,4]
plt.plot(x,y)
plt.title('Info')
plt.ylabel('Y axis') # Ось Y
plt.xlabel('X axis') # Ось X
plt.show()

Вывод

Вы даже можете попробовать множество методов стилизации, чтобы создать более совершенный график. Что делать, если вы хотите изменить ширину или цвет определенной линии, или если вы хотите создать несколько линий сетки, тогда вам нужен стиль! Итак, позвольте мне показать вам, как добавить стиль к графику с помощью python matplotlib. Сначала вам нужно импортировать пакет стилей из библиотеки python matplotlib, а затем использовать функции стилизации, как показано в приведенном ниже коде:

from matplotlib import pyplot as plt
from matplotlib import style
 
style.use('ggplot')
x = [5, 8, 10]
y = [12, 16, 6]
x2 = [6, 9, 11]
y2 = [6, 15, 7]
plt.plot(x, y, 'g', label = 'line one', linewidth = 5)
plt.plot(x2, y2, 'c', label='line two', linewidth = 5)
plt.title('Epic Info')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.legend()
plt.grid(True,color='k')
plt.show()

Вывод

Столбчатая диаграмма (bar graph)

Сначала давайте разберемся, зачем нам нужна столбчатая диаграмма. Столбчатая диаграмма использует столбцы для сравнения данных по различным категориям. Она хорошо подходит, когда вы хотите измерить изменения за определенный период времени. Она может быть представлена горизонтально или вертикально. Кроме того, важно помнить, что чем длиннее планка, тем больше значение. Теперь давайте реализуем это на практике, используя python matplotlib.

from matplotlib import pyplot as plt

plt.bar([0.25,1.25,2.25,3.25,4.25],[50,40,70,80,20],
label="BMW",width=.5)
plt.bar([.75,1.75,2.75,3.75,4.75],[80,20,20,50,60],
label="Audi", color='r',width=.5)
plt.legend()
plt.xlabel('Days')
plt.ylabel('Distance (kms)')
plt.title('Information')
plt.show()

На приведенном выше графике мы показали сравнение расстояния, пройденного двумя автомобилями BMW и Audi за 5 дней. Далее давайте перейдем к другому виду графика, используя python matplotlib - гистограмме.

Гистограмма

Позвольте мне сначала объяснить вам разницу между столбчатой диаграммой и гистограммой. Гистограммы используются для отображения распределения, в то время как столбчатая диаграмма используется для сравнения различных объектов. Гистограммы полезны, когда у вас есть массивы или очень длинный список. Давайте рассмотрим пример, в котором нам нужно построить график возраста населения относительно ячейки. Теперь, ячейка относится к диапазону значений, которые разделены на ряд интервалов. Ячейки обычно создаются одинакового размера. В приведенном ниже коде мы создадим ячейки с интервалом в 10, что означает, что первая ячейка содержит элементы от 0 до 9, затем от 10 до 19 и так далее.

import matplotlib.pyplot as plt

population_age = [
    22, 55, 62, 45, 21, 22, 34, 42, 42, 4, 2, 102, 
    95, 85, 55, 110, 120, 70, 65, 55, 111, 115, 80,
    75, 65, 54, 44, 43, 42, 48
]

bins = [
    0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
]

plt.hist(population_age, bins, histtype='bar', rwidth=0.8)
plt.xlabel('age groups')
plt.ylabel('Number of people')
plt.title('Histogram')
plt.show()

Вывод

Как вы можете видеть на графике выше, мы распределили возрастные группы по ячейкам. Наша самая многочисленная возрастная группа - от 40 до 50 лет.

Точечный график или диаграмма разброса (scatter plot)

Обычно нам нужны точечные графики, чтобы сравнить переменные, например, насколько сильно на одну переменную влияет другая переменная, чтобы построить из этого связь. Данные отображаются в виде набора точек, каждая из которых имеет значение одной переменной, определяющей положение на горизонтальной оси, а значение другой переменной определяет положение на вертикальной оси.

Рассмотрим приведенный ниже пример:

import matplotlib.pyplot as plt
x = [1, 1.5, 2, 2.5, 3, 3.5, 3.6]
y = [7.5, 8, 8.5, 9, 9.5, 10, 10.5]

x1 = [8, 8.5, 9, 9.5, 10, 10.5, 11]
y1 = [3, 3.5, 3.7, 4, 4.5, 5, 5.2]

plt.scatter(x, y, label='high income low saving', color='r')
plt.scatter(x1, y1, label='low income high savings', color='b')
plt.xlabel('saving*100')
plt.ylabel('income*1000')
plt.title('Scatter Plot')
plt.legend()
plt.show()

Вывод

Как вы можете видеть на приведенном выше графике, я построил две точечные диаграммы на основе входных данных, указанных в приведенном выше коде. Данные отображаются в виде набора точек с низкой зарплатой с высоким доходом (high-income low salary) и высокой зарплатой с низким доходом (low-income high salary).

График областей (Area plot)

Графики областей в значительной степени похожи на линейные. Они также известны как стековые графики. Эти графики можно использовать для отслеживания изменений во времени для двух или более связанных групп, составляющих единую категорию. Например, давайте распределим работу, проделанную в течение дня, по категориям, например, сон, прием пищи, работа и игры. Рассмотрим приведенный ниже код:

import matplotlib.pyplot as plt
days = [1, 2, 3, 4, 5]
 
sleeping = [7, 8, 6, 11, 7]
eating = [2, 3, 4, 3, 2]
working = [7, 8, 7, 2, 2]
playing = [8, 5, 7, 8, 13]
 
plt.plot([],[],color='m', label='Сон', linewidth=5)
plt.plot([],[],color='c', label='Обед', linewidth=5)
plt.plot([],[],color='r', label='Работа', linewidth=5)
plt.plot([],[],color='k', label='Игра', linewidth=5)
 
plt.stackplot(days, sleeping, eating, working, playing, colors=['m','c','r','k'])
 
plt.xlabel('x')
plt.ylabel('y')
plt.title('Диаграмма активности')
plt.legend()
plt.show()

Вывод

Как мы можем видеть на рисунке выше, время, затраченное на анализ, зависит от категорий. Таким образом, для отображения тенденций с течением времени по различным атрибутам используется точечный график или график стека. Далее давайте перейдем к последнему, но наиболее часто используемому графику - круговой диаграмме.

Круговая диаграмма (pie chart)

Круговая диаграмма - это круговой график, который разбит на сегменты, по этой аналогии с английского "pie chart" в названии диаграммы используется ассоциация с кусочками пирога. В основном он используется для отображения процентных или пропорциональных данных, где каждый кусочек пирога представляет категорию. Давайте посмотрим на приведенный ниже пример:

import matplotlib.pyplot as plt
 
days = [1, 2, 3, 4, 5]
 
sleeping = [7, 8, 6, 11, 7]
eating = [2, 3, 4, 3, 2]
working = [7, 8, 7, 2, 2]
playing = [8, 5, 7, 8, 13]
slices = [7, 2, 2, 13]
activities = ['Сон', 'Еда', 'Работа', 'Игра']
cols = ['c','m','r','b']

plt.pie(slices,
    labels = activities,
    colors = cols,
    startangle = 90,
    shadow = True,
    explode = (0, 0.1, 0, 0),
    autopct = '%1.1f%%')

plt.title('Радиальный график')
plt.show()

Вывод

На приведенной выше круговой диаграмме я разделил круг на 4 сектора или среза, которые представляют соответствующую категорию (игры, сон, еда и работа), а также процентное соотношение, которое они занимают. Теперь, если вы заметили, эти срезы увеличивают время приготовления до 24 часов, но расчет размеров кусочков пирога выполняется автоматически. Таким образом, круговые диаграммы действительно полезны, поскольку вам не нужно самому рассчитывать процентное соотношение или размер куска пирога.

Работа с несколькими графиками

Я уже рассказывал о нескольких типах графиков в python matplotlib, таких как линейчатый график, точечный график, круговой график, график областей и т.д. Теперь рассмотрим как работать с несколькими графиками. Для этого нужно импортировать модуль numpy, который мы рассматривали в предыдущей статье. Реализуем на практике, рассмотрим пример ниже.

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)
t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
plt.subplot(221)
plt.plot(t1, f(t1), 'bo', t2, f(t2))
plt.subplot(222)
plt.plot(t2, np.cos(2*np.pi*t2))
plt.show()

Вывод

Код в значительной степени похож на предыдущие примеры, которые вы видели, но здесь есть одно новое понятие, а именно подзаголовок. Команда subplot() задает значения numrow, numcol, fignum, которые варьируются от 1 до numrows*numcols. Запятые в этой команде необязательны, если numrows*numcols < 10. Таким образом, subplot(221) идентичен subplot(2,2,1). Таким образом, subplot() помогает нам построить несколько графиков, на которых вы можете определить его, выровняв по вертикали или горизонтали. В приведенном выше примере мы выровняли его по горизонтали.

Помимо этого, python matplotlib имеет ряд недостатков. Некоторые из них перечислены ниже:

  • Они сильно зависят от других пакетов, таких как NumPy.
  • Он работает только для python, поэтому его трудно или невозможно использовать на других языках, кроме python. (Но его можно использовать из Julia через пакет PyPlot).

Мы подошли к концу этого руководства по matplotlib. Мы описали все основы matplotlib, так что вы можете начать практиковаться прямо сейчас.

Comments

In order to leave your opinion, you need to register on the website