Визуализация данных Python с помощью Matplotlib

Введение Визуализация тенденций в области данных - одна из важнейших задач в области науки о данных и машинного обучения. Выбор алгоритмов интеллектуального анализа данных и машинного обучения в значительной степени зависит от закономерностей, выявленных в наборе данных на этапе визуализации данных. В этой статье мы увидим, как мы можем выполнять различные типы визуализации данных в Python. Мы будем использовать библиотеку Python Matplotlib [https://matplotlib.org/], которая де-факто является стандартом для визуализации данных в Python. Статья

Вступление

Визуализация трендов данных - одна из самых важных задач в области науки о данных и машинного обучения. Выбор алгоритмов интеллектуального анализа данных и машинного обучения в значительной степени зависит от закономерностей, выявленных в наборе данных на этапе визуализации данных. В этой статье мы увидим, как мы можем выполнять различные типы визуализации данных в Python. Мы будем использовать библиотеку Python Matplotlib, которая является стандартом де-факто для визуализации данных в Python.

Статья «Краткое введение в Matplotlib для визуализации данных» дает очень подробное представление о библиотеке Matplot и объясняет, как рисовать точечные диаграммы, гистограммы, гистограммы и т. Д. В этой статье мы исследуем дополнительные функции Matplotlib.

Изменение размера печати по умолчанию

Первое, что мы сделаем, это изменим размер графика по умолчанию. По умолчанию размер графиков Matplotlib составляет 6 x 4 дюйма. Размер графиков по умолчанию можно проверить с помощью этой команды:

 import matplotlib.pyplot as plt 
 
 print(plt.rcParams.get('figure.figsize')) 

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

 fig_size = plt.rcParams["figure.figsize"] 
 fig_size[0] = 10 
 fig_size[1] = 8 
 plt.rcParams["figure.figsize"] = fig_size 

Приведенный выше сценарий изменяет размер графиков Matplotlib по умолчанию на 10 x 8 дюймов.

Начнем обсуждение с простого линейного сюжета.

Линейный график

Линейный график - это самый простой график в Matplotlib. Его можно использовать для построения любой функции. Построим линейный график для функции куба. Взгляните на следующий сценарий:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 plt.plot(x, y, 'b') 
 plt.xlabel('X axis') 
 plt.ylabel('Y axis') 
 plt.title('Cube Function') 
 plt.show() 

В приведенном выше сценарии мы сначала импортируем pyplot из библиотеки Matplotlib. У нас есть два numpy массива x и y в нашем скрипте. Мы использовали метод linspace numpy для создания списка из 20 чисел от -10 до положительного 9. Затем мы извлекаем кубический корень из всего числа и присваиваем результат переменной y . Для того, чтобы построить два numpy массивов, вы можете просто передать их на plot способ pyplot класса библиотеки Matplotlib. Вы можете использовать xlabel , ylabel и title pyplot , чтобы пометить ось x, ось y и заголовок графика. Результат сценария выше выглядит следующим образом:

Выход:

{.ezlazyload .img-responsive}

Создание нескольких графиков

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

 import matplotlib.pyplot as plt 
 import numpy as np 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 plt.subplot(2,2,1) 
 plt.plot(x, y, 'b*-') 
 plt.subplot(2,2,2) 
 plt.plot(x, y, 'y--') 
 plt.subplot(2,2,3) 
 plt.plot(x, y, 'b*-') 
 plt.subplot(2,2,4) 
 plt.plot(x, y, 'y--') 

Первый атрибут subplot - это строки, которые будут иметь subplot, а второй параметр задает количество столбцов для subplot. Значение 2,2 вида, что будет четыре графика. Третий аргумент - это позиция, в которой будет отображаться график. Позиции начинаются сверху слева. График с позицией 1 будет отображаться в первой строке и первом столбце. Точно так же график с позицией 2 будет отображаться в первой строке и втором столбце.

Взгляните на третий аргумент функции построения plot . Этот аргумент определяет форму и цвет маркера на графике.

Выход:

{.ezlazyload .img-responsive}

Объектно-ориентированное построение графиков

В предыдущем разделе мы использовали plot метод pyplot класса и передать его значение для й и у координат вместе с метками. Однако в Python тот же сюжет можно нарисовать объектно-ориентированным способом. Взгляните на следующий сценарий:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 figure = plt.figure() 
 
 axes = figure.add_axes([0.2, 0.2, 0.8, 0.8]) 

Метод figure вызываемый с использованием класса pyplot возвращает объект figure Вы можете вызвать add_axes используя этот объект. Параметры, передаваемые add_axes - это расстояние от левого и нижнего края оси по умолчанию, а также ширина и высота оси соответственно. Значение этих параметров следует указывать как часть размера рисунка по умолчанию. Выполнение приведенного выше сценария создает пустую ось, как показано на следующем рисунке:

Результат выполнения сценария выше выглядит следующим образом:

{.ezlazyload .img-responsive}

У нас есть ось, теперь мы можем добавлять к ней данные и метки. Чтобы добавить данные, нам нужно вызвать plot и передать ей наши данные. Аналогичным образом, чтобы создать метки для оси X, оси Y и заголовка, мы можем использовать функции set_xlabel , set_ylabel и set_title как показано ниже:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 figure = plt.figure() 
 
 axes = figure.add_axes([0.2, 0.2, 0.8, 0.8]) 
 
 axes.plot(x, y, 'b') 
 axes.set_xlabel('X Axis') 
 axes.set_ylabel('Y Axis') 
 axes.set_title('Cube function') 

{.ezlazyload .img-responsive}

Вы можете видеть, что результат аналогичен тому, который мы получили в предыдущем разделе, но на этот раз мы использовали объектно-ориентированный подход.

Вы можете добавить столько осей, сколько хотите на одном графике, используя метод add_axes Взгляните на следующий пример:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 z = x ** 2 
 
 figure = plt.figure() 
 
 axes = figure.add_axes([0.0, 0.0, 0.9, 0.9]) 
 axes2 = figure.add_axes([0.07, 0.55, 0.35, 0.3]) # inset axes 
 
 axes.plot(x, y, 'b') 
 axes.set_xlabel('X Axis') 
 axes.set_ylabel('Y Axis') 
 axes.set_title('Cube function') 
 
 axes2.plot(x, z, 'r') 
 axes2.set_xlabel('X Axis') 
 axes2.set_ylabel('Y Axis') 
 axes2.set_title('Square function') 

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

В этом примере вы лучше поймете роль параметров для левого, нижнего, ширины и высоты. На первой оси значения для левого и нижнего края установлены на ноль, а значения для ширины и высоты установлены на 0,9, что означает, что наша внешняя ось будет иметь 90% ширины и высоты оси по умолчанию.

Для второй оси значение левой стороны установлено на 0,07, для нижней части установлено на 0,55, а ширина и высота - 0,35 и 0,3 соответственно. Если вы выполните приведенный выше сценарий, вы увидите большой график для функции куба и небольшой график для функции квадрата, который находится внутри графика для куба. Результат выглядит так:

{.ezlazyload .img-responsive}

Подсюжеты

Другой способ создать несколько графиков одновременно - использовать метод subplot Вам необходимо передать значения для параметров nrow и ncols . Общее количество сгенерированных графиков будет nrow x ncols . Давайте посмотрим на простой пример. Выполните следующий скрипт:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 z = x ** 2 
 
 fig, axes = plt.subplots(nrows=2, ncols=3) 

В результате вы увидите 6 графиков в 2 строки и 3 столбца, как показано ниже:

{.ezlazyload .img-responsive}

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

 import matplotlib.pyplot as plt 
 import numpy as np 
 x = np.linspace(-10, 9, 20) 
 
 z = x ** 2 
 
 figure, axes = plt.subplots(nrows=2, ncols=3) 
 
 for rows in axes: 
 for ax1 in rows: 
 ax1.plot(x, z, 'b') 
 ax1.set_xlabel('X - axis') 
 ax1.set_ylabel('Y - axis') 
 ax1.set_title('Square Function') 

В приведенном выше сценарии мы перебираем оси, возвращаемые subplots и отображаем выходные данные квадратной функции на каждой оси. Помните, поскольку у нас есть оси в 2 строках и трех столбцах, мы должны выполнить вложенный цикл для перебора всех осей. Внешний цикл for выполняет итерацию по осям в строках, а внутренний цикл for выполняет итерацию по оси в столбцах. Результат сценария выше выглядит следующим образом:

{.ezlazyload .img-responsive}

На выходе вы можете увидеть все шесть графиков с квадратными функциями.

Изменение размера рисунка для сюжета

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

 import matplotlib.pyplot as plt 
 import numpy as np 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 z = x ** 2 
 
 figure, axes = plt.subplots(figsize = (6,8)) 
 
 axes.plot(x, z, 'r') 
 axes.set_xlabel('X-Axis') 
 axes.set_ylabel('Y-Axis') 
 axes.set_title('Square Function') 

В приведенном выше сценарии нарисуйте график квадратной функции шириной 6 дюймов и высотой 8 дюймов. Результат выглядит примерно так:

{.ezlazyload .img-responsive}

Добавление легенд

Добавление легенд к сюжету очень просто с помощью библиотеки Matplotlib. Все, что вам нужно сделать, это передать значение label функции построения plot . Затем, после вызова plot , вам просто нужно вызвать функцию legend Взгляните на следующий пример:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 z = x ** 2 
 
 figure = plt.figure() 
 
 axes = figure.add_axes([0,0,1,1]) 
 
 axes.plot(x, z, label="Square Function") 
 axes.plot(x, y, label="Cube Function") 
 axes.legend() 

В приведенном выше скрипте мы определяем две функции: квадрат и куб, используя переменные x, y и z. Затем мы сначала строим квадратную функцию, а для label мы передаем значение Square Function . Это будет значение, отображаемое на этикетке для функции квадрата. Затем мы строим график функции куба и передаем функцию Cube Function качестве значения для параметра label Результат выглядит примерно так:

{.ezlazyload .img-responsive}

На выходе вы можете увидеть легенду в верхнем левом углу.

Положение легенды можно изменить, передав значение параметра loc функции legend Возможные значения могут быть 1 (для верхнего правого угла), 2 (для верхнего левого угла), 3 (для нижнего левого угла) и 4 (для нижнего правого угла). Нарисуем легенду в правом нижнем углу графика. Выполните следующий скрипт:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 z = x ** 2 
 
 figure = plt.figure() 
 
 axes = figure.add_axes([0,0,1,1]) 
 
 axes.plot(x, z, label="Square Function") 
 axes.plot(x, y, label="Cube Function") 
 axes.legend(loc=4) 

Выход:

{.ezlazyload .img-responsive}

Варианты цвета

Есть несколько вариантов изменения цвета и стиля графиков. Самый простой способ - передать первую букву цвета в качестве третьего аргумента, как показано в следующем скрипте:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 z = x ** 2 
 
 figure = plt.figure() 
 
 axes = figure.add_axes([0,0,1,1]) 
 
 axes.plot(x, z, "r" ,label="Square Function") 
 axes.plot(x, y, "g", label="Cube Function") 
 axes.legend(loc=4) 

В приведенном выше сценарии строка «r» была передана в качестве третьего параметра для первого графика. Для второго графика строка «g» была передана в третьем параметре. На выходе первый график будет напечатан сплошной красной линией, а второй график будет напечатан сплошной зеленой линией, как показано ниже:

{.ezlazyload .img-responsive}

Другой способ изменить цвет графика - использовать параметр color В параметр цвета можно передать имя цвета или шестнадцатеричное значение color . Взгляните на следующий пример:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 z = x ** 2 
 
 figure = plt.figure() 
 
 axes = figure.add_axes([0,0,1,1]) 
 
 axes.plot(x, z, color = "purple" ,label="Square Function") 
 axes.plot(x, y, color = "#FF0000", label="Cube Function") 
 axes.legend(loc=4) 

Выход:

{.ezlazyload .img-responsive}

Участок стека

Stack plot - это расширение линейчатой или линейной диаграммы, которая разбивает данные из разных категорий и складывает их вместе, чтобы можно было легко сравнить значения из разных категорий.

Предположим, вы хотите сравнить голы, забитые тремя разными футболистами в год за последние 8 лет, вы можете создать график стека с помощью Matplot, используя следующий скрипт:

 import matplotlib.pyplot as plt 
 
 year = [2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018] 
 
 player1 = [8,10,17,15,23,18,24,29] 
 player2 = [10,14,19,16,25,20,26,32] 
 player3 = [12,17,21,19,26,22,28,35] 
 
 plt.plot([],[], color='y', label = 'player1') 
 plt.plot([],[], color='r', label = 'player2') 
 plt.plot([],[], color='b', label = 'player3 ') 
 
 plt.stackplot(year, player1, player2, player3, colors = ['y','r','b']) 
 plt.legend() 
 plt.title('Goals by three players') 
 plt.xlabel('year') 
 plt.ylabel('Goals') 
 plt.show() 

Выход:

{.ezlazyload .img-responsive}

Чтобы создать график стека с помощью Python, вы можете просто использовать stackplot библиотеки Matplotlib. Значения, которые вы хотите отобразить, передаются как первый параметр в класс, а значения, которые должны быть размещены на горизонтальной оси, отображаются как второй параметр, третий параметр и так далее. Вы также можете установить цвет для каждой категории, используя атрибут colors

Круговая диаграмма

Тип круговой диаграммы - это круговая диаграмма, в которой различные категории отмечены как части круга. Чем больше доля категории, тем большую часть она займет на диаграмме.

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

 import matplotlib.pyplot as plt 
 
 goal_types = 'Penalties', 'Field Goals', 'Free Kicks' 
 
 goals = [12,38,7] 
 colors = ['y','r','b'] 
 
 plt.pie(goals, labels = goal_types, colors=colors ,shadow = True, explode = (0.05, 0.05, 0.05), autopct = '%1.1f%%') 
 plt.axis('equal') 
 
 plt.show() 

Выход:

{.ezlazyload .img-responsive}

Для создания круговой диаграммы в Matplot lib используется класс pie Первый параметр конструктора класса - это список чисел для каждой категории. Список категорий, разделенных запятыми, передается в качестве аргумента атрибута labels Список цветов для каждой категории передается в атрибут colors Если установлено значение true, shadow создает тени вокруг разных категорий на круговой диаграмме. Наконец, explode разбивает круговую диаграмму на отдельные части.

Здесь важно отметить, что вам не нужно передавать процент для каждой категории; вам просто нужно передать значения, и процент для круговых диаграмм будет рассчитан автоматически.

Сохранение графика

Сохранить график в Matplotlib очень просто. Все, что вам нужно сделать, это вызвать метод savefig figure и передать ему путь к файлу, с которым вы хотите сохранить график. Взгляните на следующий пример:

 import matplotlib.pyplot as plt 
 import numpy as np 
 x = np.linspace(-10, 9, 20) 
 
 y = x ** 3 
 
 z = x ** 2 
 
 figure, axes = plt.subplots(figsize = (6,8)) 
 
 axes.plot(x, z, 'r') 
 axes.set_xlabel('X-Axis') 
 axes.set_ylabel('Y-Axis') 
 axes.set_title('Square Function') 
 
 figure.savefig(r'E:/fig1.jpg') 

Приведенный выше сценарий сохранит ваш файл с именем fig1.jpg в корне каталога E

Если вас интересует визуализация данных и вы не знаете, с чего начать, обязательно ознакомьтесь с нашей книгой о визуализации данных в Python{.ebook-link} .

Книга «Визуализация данных в Python» , книга для начинающих и средних разработчиков Python, проведет вас через простые операции с данными с помощью Pandas, расскажет о базовых библиотеках построения графиков, таких как Matplotlib и Seaborn, и покажет, как воспользоваться преимуществами декларативных и экспериментальных библиотек, таких как Altair.

::: {style=“border: 1px solid #ebebeb;padding: 15px;margin-bottom: 30px;"} {.ebook-link}

Визуализация данных в Python

::: {.row} ::: {.col-md-4 .col-xs-12} {.ezlazyload .img-responsive .center-block} :::

::: {.col-md-8 .col-xs-12 .my-auto} Поймите свои данные лучше с помощью визуализаций! На более чем 275 страницах вы узнаете все тонкости визуализации данных в Python с помощью популярных библиотек, таких как Matplotlib, Seaborn, Bokeh и других. ::: ::: :::

Заключение

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

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus