Вступление
Визуализация трендов данных - одна из самых важных задач в области науки о данных и машинного обучения. Выбор алгоритмов интеллектуального анализа данных и машинного обучения в значительной степени зависит от закономерностей, выявленных в наборе данных на этапе визуализации данных. В этой статье мы увидим, как мы можем выполнять различные типы визуализации данных в 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 и посмотреть, что еще вы можете сделать с этой замечательной библиотекой.