# Как создать 3D-диаграммы рассеяния в Matplotlib

В этом руководстве **вы научитесь создавать трехмерные диаграммы рассеяния с использованием Matplotlib**. Умение визуализировать данные в трех измерениях может быть важным шагом для четкого представления данных, особенно в науке и машинном обучении.

К концу этого урока вы научитесь:

* Как построить трехмерные диаграммы рассеяния с помощью Matplotlib
* Как изменить размер, непрозрачность и цвет точек данных в трех измерениях
* Как добавить заголовки и метки осей к вашей трехмерной диаграмме рассеяния в Matplotlib

Оглавление

* [Создание 3D-диаграммы рассеяния в Matplotlib](#sozdanie-3d-diagrammy-rasseyaniya-v-matplotlib)
* [Изменение цвета точек на 3D-диаграммах в Matplotlib](#izmenenie-cveta-tochek-na-3d-diagrammakh-v-matplotlib)
* [Изменение размера точек на 3D-диаграммах в Matplotlib](#izmenenie-razmera-tochek-na-3d-diagrammakh-v-matplotlib)
* [Изменение непрозрачности точек на 3D-диаграммах в Matplotlib](#izmenenie-neprozrachnosti-tochek-na-3d-diagrammakh-v-matplotlib)
* [Добавление заголовков и меток осей к 3D-диаграммам рассеяния в Matplotlib](#dobavlenie-zagolovkov-i-metok-osei-k-3d-diagrammam-rasseyaniya-v-matplotlib)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Создание 3D-диаграммы рассеяния в Matplotlib

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

```python
# Импорт библиотек и загрузка данных
from mpl_toolkits import mplot3d
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 25, 0.1)  # Создание массива значений x от 0 до 25 с шагом 0.1
y = np.cos(x)  # Создание массива значений y как косинуса от x
z = np.sin(x)  # Создание массива значений z как синуса от x
print(x, y, z)
```

Давайте посмотрим, как мы можем визуализировать наши данные. Сначала мы настроим наш график, `fig`, и оси, `ax`, для отображения нашей визуализации. Наши оси укажут, что мы хотим проецировать данные в трех измерениях, передав `projection='3d'`.

Оттуда мы можем легко создать 3D-диаграмму рассеяния, используя функцию

```python
# Создание трехмерной точечной диаграммы рассеяния в Matplotlib
fig = plt.figure()  # Создание новой фигуры
ax = plt.axes(projection='3d')  # Добавление трехмерных осей

ax.scatter3D(x, y, z)  # Построение трехмерной точечной диаграммы рассеяния
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%2FlOVI85Sn8httxYEIIhqr%2F%D0%92%D0%B0%D1%88%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B2%D0%B0%D1%8F%20%D1%82%D1%80%D0%B5%D1%85%D0%BC%D0%B5%D1%80%D0%BD%D0%B0%D1%8F%20%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%20%D1%80%D0%B0%D1%81%D1%81%D0%B5%D1%8F%D0%BD%D0%B8%D1%8F%20%D0%B2%20Matplotlib.png?alt=media&#x26;token=57669cd7-4487-469c-90e9-b93632a43c77" alt=""><figcaption><p>Ваша первая трехмерная диаграмма рассеяния в Matplotlib</p></figcaption></figure>
{% endtab %}

{% tab title="Код" %}
```python
# Импорт библиотек и загрузка данных
from mpl_toolkits import mplot3d
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 25, 0.1)  # Создание массива значений x от 0 до 25 с шагом 0.1
y = np.cos(x)  # Создание массива значений y как косинуса от x
z = np.sin(x)  # Создание массива значений z как синуса от x

# Создание трехмерной точечной диаграммы рассеяния в Matplotlib
fig = plt.figure()  # Создание новой фигуры
ax = plt.axes(projection='3d')  # Добавление трехмерных осей

ax.scatter3D(x, y, z)  # Построение трехмерной точечной диаграммы рассеяния
plt.show()  # Отображение графика
```
{% endtab %}
{% endtabs %}

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

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

### Изменение цвета точек на 3D-диаграммах в Matplotlib

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

Чтобы сделать это, мы можем использовать параметр `c=`. Это позволяет нам передать один цвет, если мы хотим использовать один и тот же цвет для всех точек, или массив чисел для окрашивания в зависимости от значения.

При работе с последовательными данными, как в нашем примере, можно использовать карты цветов. Это позволяет создать градиент для демонстрации изменений в данных. Различные карты цветов, предлагаемые библиотекой Matplotlib, можно найти [здесь](https://matplotlib.org/stable/tutorials/colors/colormaps.html).

Давайте посмотрим, что произойдет, когда мы используем наш массив `x` в качестве цветов и применяем карту цветов

{% tabs %}
{% tab title="Код" %}
```python
# Добавление цвета к нашей трехмерной точечной диаграмме рассеяния
from mpl_toolkits import mplot3d
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 25, 0.1)
y = np.cos(x)
z = np.sin(x)

fig = plt.figure()
ax = plt.axes(projection='3d')

# Использование значения x в качестве цвета точек, заданных с помощью параметра c
ax.scatter3D(x, y, z, c=x, cmap='Blues')
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%2FLTKKKE0QRv4GHgQMLXiM%2F%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%86%D0%B2%D0%B5%D1%82%D0%B0%20%D0%BA%20%D1%82%D1%80%D0%B5%D1%85%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B9%20%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B5%20%D1%80%D0%B0%D1%81%D1%81%D0%B5%D1%8F%D0%BD%D0%B8%D1%8F%20%D0%B2%20Matplotlib.png?alt=media&#x26;token=cb80a124-4609-439c-ab10-f2e711c64ea5" alt=""><figcaption><p>Добавление цвета к трехмерной диаграмме рассеяния в Matplotlib</p></figcaption></figure>
{% endtab %}
{% endtabs %}

### Изменение размера точек на 3D-диаграммах в Matplotlib

Подобно использованию цвета для передачи дополнительной информации, мы также можем использовать размер маркера, чтобы предоставить читателю больше информации. Для этого используется параметр `s=`. Это позволяет нам передать либо одно целое число для размера всех точек, либо массив чисел для изменения размеров отдельных точек.

Давайте используем переменную `x` для определения размера наших точек:

{% tabs %}
{% tab title="Код" %}
```python
# Изменение размера маркера на трехмерной точечной диаграмме рассеяния
from mpl_toolkits import mplot3d
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 25, 0.1)
y = np.cos(x)
z = np.sin(x)

fig = plt.figure()
ax = plt.axes(projection='3d')

# Использование значения x в качестве размера маркеров, заданного с помощью параметра s
ax.scatter3D(x, y, z, s=x)
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%2FevfnkKVvuD8WqA9MRH1v%2F%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%B0%20%D0%BC%D0%B0%D1%80%D0%BA%D0%B5%D1%80%D0%B0%20%D0%BD%D0%B0%20%D1%82%D1%80%D0%B5%D1%85%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B9%20%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B5%20%D1%80%D0%B0%D1%81%D1%81%D0%B5%D1%8F%D0%BD%D0%B8%D1%8F%20%D0%B2%20Matplotlib.png?alt=media&#x26;token=092700d6-b745-48d9-a255-ac823c78eab4" alt=""><figcaption><p>Изменение размера маркера на трехмерной диаграмме рассеяния в Matplotlib</p></figcaption></figure>
{% endtab %}
{% endtabs %}

### Изменение непрозрачности точек на 3D-диаграммах в Matplotlib

По умолчанию Matplotlib использует прозрачность точек, чтобы показать, насколько "далеко" точки находятся от пользователя. Это делается для того, чтобы помочь читателям визуализировать третье измерение на двумерных экранах. Однако это также может привести к неправильной интерпретации.

Matplotlib позволяет настраивать прозрачность каждой точки, используя параметр `alpha=`, куда можно передать число с плавающей точкой. 0 обозначает полную прозрачность, в то время как 1 — отсутствие прозрачности.

Давай посмотрим, как это работает:

{% tabs %}
{% tab title="Код" %}
```python
# Изменение прозрачности маркеров на трехмерной точечной диаграмме рассеяния
from mpl_toolkits import mplot3d
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 25, 0.1)
y = np.cos(x)
z = np.sin(x)

fig = plt.figure()
ax = plt.axes(projection='3d')

# Использование параметра alpha для задания прозрачности маркеров
ax.scatter3D(x, y, z, alpha=0.7)
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%2FFJmRwGEOEXCJFpGM4BvJ%2F%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BD%D0%B5%D0%BF%D1%80%D0%BE%D0%B7%D1%80%D0%B0%D1%87%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20%D0%B2%20%D1%82%D1%80%D0%B5%D1%85%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B9%20%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B5%20%D1%80%D0%B0%D1%81%D1%81%D0%B5%D1%8F%D0%BD%D0%B8%D1%8F%20%D0%B2%20Matplotlib.png?alt=media&#x26;token=3bdd87ab-5447-4f68-9c88-bf04d7fdcc7c" alt=""><figcaption><p>Изменение непрозрачности в трехмерной диаграмме рассеяния в Matplotlib</p></figcaption></figure>
{% endtab %}
{% endtabs %}

### Добавление заголовков и меток осей к 3D-диаграммам рассеяния в Matplotlib

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

* `plt.title()` установить заголовок
* `plt.set_xlabel()`  установить метку оси X
* `plt.set_ylabel()`чтобы установить метку оси Y
* `ax.set_zlabel()` чтобы установить метку оси Z

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

{% tabs %}
{% tab title="Код" %}
```python
# Добавление заголовка и подписей к осям нашей трехмерной точечной диаграмме рассеяния
from mpl_toolkits import mplot3d
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 25, 0.1)
y = np.cos(x)
z = np.sin(x)

fig = plt.figure()
ax = plt.axes(projection='3d')

# Добавление заголовка и подписей к осям
ax.scatter3D(x, y, z)
plt.title('Наша 3D-диаграмма рассеяния', size=18)
plt.xlabel('x-axis')
plt.ylabel('y-axis')
ax.set_zlabel('z-axis')
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%2FlzadmjtjIa5NVt2x4CWP%2F%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2%20%D0%B8%20%D0%BC%D0%B5%D1%82%D0%BE%D0%BA%20%D0%BA%20%D1%82%D1%80%D0%B5%D1%85%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B9%20%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B5%20%D1%80%D0%B0%D1%81%D1%81%D0%B5%D1%8F%D0%BD%D0%B8%D1%8F%20%D0%B2%20Matplotlib.png?alt=media&#x26;token=cb3117c9-2c94-4ce2-a0b8-86bb11939482" alt=""><figcaption><p>Добавление заголовков и меток к трехмерной диаграмме рассеяния в Matplotlib</p></figcaption></figure>
{% endtab %}
{% endtabs %}

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

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

### Дополнительные ресурсы

Чтобы узнать больше о схожих темах, ознакомьтесь с приведенными ниже руководствами:

* Построение графиков на Python с помощью Matplotlib
* Диаграммы рассеяния Matplotlib – узнайте все, что вам нужно знать
* Линейные диаграммы Matplotlib – узнайте все, что вам нужно знать
