# Как построить функцию в Python с использованием Matplotlib

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

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

#### Вот небольшой предварительный просмотр того, что вы узнаете:

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FWyrA0ZJE0a0T6ZXQQayV%2F%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8.png?alt=media&#x26;token=45ba6174-ee90-4353-a307-b7a75bab5af4" alt=""><figcaption></figcaption></figure>

Оглавление

* [Как построить функцию в Python с помощью Matplotlib](#kak-postroit-funkciyu-v-python-s-pomoshyu-matplotlib)
  * [Как добавить легенду и заголовок к графикам Matplotlib](#kak-dobavit-legendu-i-zagolovok-k-grafikam-matplotlib)
* [Как построить функцию с помощью Seaborn](#kak-postroit-funkciyu-s-pomoshyu-seaborn)
* [Заключение](#zaklyuchenie)

### Как построить функцию в Python с помощью Matplotlib

**Чтобы построить функцию в Python с использованием Matplotlib, нам нужно определить диапазон значений x и y, соответствующих этой функции.** Для этого нам нужно:

1. Определим нашу функцию и
2. Создайте диапазон непрерывных значений x и отобразите соответствующие значения y

Давайте посмотрим, как мы можем это сделать. В первую очередь, нам нужно будет импортировать наши библиотеки:

```python
# Импорт библиотек
import matplotlib.pyplot as plt
import numpy as np
```

Для построения функции нам необходимо импортировать две библиотеки: `matplotlib.pyplot` и `numpy`. Мы используем NumPy для того, чтобы более легко применять функцию к целому массиву.

Давайте теперь определим функцию, которая будет повторять синтаксис `f(x) = x ** 2`. Мы сделаем всё максимально просто, просто возводя наш вход в квадрат. Давайте посмотрим, как мы можем определить эту функцию:

```python
# Определение функции
def f(x):
    return x ** 2
```

Теперь, когда у нас есть функция, давайте определим наш диапазон x и диапазон y. Для этого мы будем использовать функцию linspace из NumPy, которая [создает диапазон равномерно расположенных чисел](https://datagy.io/numpy-linspace/). Давайте посмотрим, как это выглядит:

```python
# Создание диапазонов для x и y
x = np.linspace(-5, 5, 1000)
y = f(x)
```

Поскольку мы определили массив NumPy, мы можем просто передать массив в функцию, и [он будет применён поэлементно](https://datagy.io/numpy-map-function/). Теперь, когда у нас есть эти массивы, давайте построим наш график:

```python
# Построение данных
plt.plot(x, y)
plt.show()
```

Это возвращает следующее изображение:

{% tabs %}
{% tab title="Изображение" %}

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FXC4qJech0gKLLg2SmsLx%2F%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8%20%D0%B2%20Python%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Matplotlib.png?alt=media&#x26;token=96cdc44f-ccac-476e-a199-2f70b06bf339" alt=""><figcaption><p>Построение функции в Python с помощью Matplotlib</p></figcaption></figure>
{% endtab %}

{% tab title="Код полностью" %}

```python
# Импорт библиотек
import matplotlib.pyplot as plt
import numpy as np

# Определение функции
def f(x):
    return x ** 2

# Создание диапазонов для x и y
x = np.linspace(-5, 5, 1000)
y = f(x)

# Построение данных
plt.plot(x, y)
plt.show()
```

{% endtab %}
{% endtabs %}

Мы видим, что данные изменяются от -5 до +5, хотя график заканчивается раньше. Поскольку функция `f(x) = x ** 2` фактически простирается за эти значения, мы должны изменить наш график так, чтобы он заканчивался раньше. Давайте посмотрим, как мы можем это сделать:

```python
# Изменение пределов осей
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlim(-5, 5)
ax.set_ylim(0, 25)
plt.show()
```

Давайте исследуем, что было сделано в приведенном выше блоке кода:

1. Мы изменили построение графика, используя объектно-ориентированный подход с помощью функции
2. Мы затем построили нашу функцию на осях
3. Наконец, мы использовали методы `.set_xlim()` и `.set_ylim()` для изменения границ нашего графика.

Это вернуло следующее изображение:

{% tabs %}
{% tab title="Изображение" %}

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2F0MkRBNyLowTfNrRUDa7G%2F%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%BE%D0%B2%20%D0%BE%D1%81%D0%B5%D0%B9.png?alt=media&#x26;token=a669efab-5545-46f6-8c2e-72d2b0db0333" alt=""><figcaption><p>Изменение пределов осей</p></figcaption></figure>
{% endtab %}

{% tab title="Код полностью" %}

```python
# Импорт библиотек
import matplotlib.pyplot as plt
import numpy as np

# Определение функции
def f(x):
    return x ** 2

# Создание диапазонов для x и y
x = np.linspace(-5, 5, 1000)
y = f(x)

# Изменение пределов осей
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlim(-5, 5)
ax.set_ylim(0, 25)
plt.show()
```

{% endtab %}
{% endtabs %}

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

#### Как добавить легенду и заголовок к графикам Matplotlib

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

```python
# Определение дополнительной функции
def sin(x):
    return 5 * np.sin(x)

# Создание значений x и y
x = np.linspace(-5, 5, 1000)
y1 = f(x)
y2 = sin(x)

# Построение обеих функций
fig, ax = plt.subplots()
ax.plot(x, y1, label='f(x)=x**2')
ax.plot(x, y2, label='f(x)=5sin(x)')
ax.set_title('Построение функций в Matplotlib', size=14)
ax.set_xlim(-5, 5)
ax.set_ylim(-5, 25)
plt.legend()
plt.show()
```

Давайте разберем, что мы делали в приведенном выше блоке кода:

1. Мы определили вторую функцию и рассчитали наши диапазоны значений x и y
2. Мы создали наш график и оси, а затем построили обе функции на этих осях.
3. Обратите внимание, что мы использовали параметр `label=`, который позволяет вам маркировать диапазон в визуализации
4. Мы затем использовали метод `.set_title()` для установки заголовка на оси нашего графика

Это возвращает следующее изображение:

{% tabs %}
{% tab title="Изображение" %}

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FWyrA0ZJE0a0T6ZXQQayV%2F%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8.png?alt=media&#x26;token=45ba6174-ee90-4353-a307-b7a75bab5af4" alt=""><figcaption><p>Построение текущих функций</p></figcaption></figure>
{% endtab %}

{% tab title="Код  полностью" %}

```python
# Импорт библиотек
import matplotlib.pyplot as plt
import numpy as np

# Определение функции
def f(x):
    return x ** 2

# Создание диапазонов для x и y
x = np.linspace(-5, 5, 1000)
y = f(x)

# Определение дополнительной функции
def sin(x):
    return 5 * np.sin(x)

# Создание значений x и y
x = np.linspace(-5, 5, 1000)
y1 = f(x)
y2 = sin(x)

# Построение обеих функций
fig, ax = plt.subplots()
ax.plot(x, y1, label='f(x)=x**2')
ax.plot(x, y2, label='f(x)=5sin(x)')
ax.set_title('Построение функций в Matplotlib', size=14)
ax.set_xlim(-5, 5)
ax.set_ylim(-5, 25)
plt.legend()
plt.show()
```

{% endtab %}
{% endtabs %}

Уф! Итак, мы смогли нарисовать две функции на одном графике, а затем добавить описания этих функций в легенду графика. В следующем разделе вы узнаете, как сделать это с помощью Seaborn.

### Как построить функцию с помощью Seaborn

В этом разделе вы узнаете, как использовать Seaborn для построения двух функций. Поскольку этот процесс очень похож на использование Matplotlib, я не буду описывать каждую деталь, а скорее объясню, что отличается от нашей реализации в Matplotlib. Обратите внимание на приведенный ниже блок кода:

{% tabs %}
{% tab title="Код" %}

```python
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Определение функций
def f(x):
    return x ** 2

def sin(x):
    return 5 * np.sin(x)

# Создание значений x и y для функций
x = np.linspace(-5, 5, 1000)
y1 = f(x)
y2 = sin(x)

# Создание DataFrame из значений x, y1 и y2
df = pd.DataFrame(zip(x, y1, y2), columns=['x', 'y=f(x)', 'y=5*sin(x)']).set_index('x')
fig, ax = plt.subplots()

# Построение графиков с помощью sns.lineplot() на ax
sns.set_palette('Set2')  # Установка цветовой палитры
sns.set_style('ticks')  # Установка стиля графика
sns.lineplot(data=df, ax=ax)
ax.set_title('Построение функций в Matplotlib', size=14)  # Установка заголовка
ax.set_xlim(-5, 5)  # Установка предела по оси x
ax.set_ylim(-5, 25)  # Установка предела по оси y

# Удаление лишних линий из графика
sns.despine()

plt.show()
```

{% endtab %}

{% tab title="Результат" %}

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FPd4y2lKQMCPguCJH4GIo%2F%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82.png?alt=media&#x26;token=b1b67a74-3f2c-4a45-849e-5c46ea6ec290" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

Давайте разберем, что мы сделали в приведенном выше блоке кода:

1. Мы импортировали Seaborn и Pandas, так как будем работать с DataFrame Pandas
2. Мы объявили наши две функции и передали три массива в функцию Python `zip()`, которая позволяет проходить по массивам поэлементно
3. Мы использовали некоторые вспомогательные функции Seaborn для установки стиля и палитры, а затем выполнили построение наших двух функций с помощью функции lineplot Seaborn. Поскольку значения по оси x являются индексом DataFrame, мы можем передать в функцию данные в широком формате.
4. Наконец, мы используем функцию Seaborn despine для удаления верхней и правой границ нашего графика

Это позволяет нам легко добавить стилизацию к нашей визуализации, на что в Matplotlib потребовалось бы значительно больше времени!

### Заключение

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

**Seaborn** предоставляет возможности для построения графиков с более продвинутыми статистическими аналитическими и визуализационными инструментами ([официальная документация по lineplot](https://seaborn.pydata.org/generated/seaborn.lineplot.html)). Эти библиотеки позволяют нам быстро и легко генерировать графики, которые помогают лучше понять наши данные и принимать более обоснованные решения. В целом, понимание того, как использовать эти библиотеки для построения графиков функций, является ценным навыком для всех, кто работает с данными в Python.
