Рубрики
Без рубрики

MATPLOTLIB 3D участник – полезное иллюстрированное руководство

Узнайте основы 3D-участков в MatPlotlib – как сделать линию и рассеивание, добавить этикетки оси, легенды и изменить цвет фона [+ бонусное видео]

Автор оригинала: Adam Murphy.

Вы устали с тем же старыми 2D-участками? Вы хотите принять свои участки на следующий уровень? Ну не посмотрите дальше, пришло время узнать, как сделать 3D участки в Матплотлиб Отказ

В дополнение к Импорт matplotlib.pyplot как PLT и звонить PLT.Show () , чтобы создать 3D участок в Matplotlib, вам нужно:

  1. Импорт AXES3D объект
  2. Инициализировать свой Фигура и AXES3D объекты
  3. Получите некоторые 3D-данные
  4. Сюжет его, используя Оси Нотации и стандартные вызовы функций
# Standard import
import matplotlib.pyplot as plt

# Import 3D Axes 
from mpl_toolkits.mplot3d import axes3d

# Set up Figure and 3D Axes 
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Get some 3D data
X = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Y = [2, 5, 8, 2, 10, 1, 10, 5, 7, 8]
Z = [6, 3, 9, 6, 3, 2, 3, 10, 2, 4]

# Plot using Axes notation and standard function calls
ax.plot(X, Y, Z)
plt.show()

Потрясающие! Вы только что создали свой первый трехмерный участок! Не волнуйтесь, если это было немного быстро, давайте погрузимся в более подробный пример.

Попробуйте сами нашей интерактивной раковине Python. Просто выполните код и посмотрите на созданный файл «Plot.png»:

Связанная статья:

  • Как начать изучать Python

MATPLOTLIB 3D пример участка

Если вы привыкли построить с Рисунок и Оси Обозначение, делающие 3D участки в Matplotlib практически идентичны создавать 2D. Если вам не удобно Рисунок и Оси Обозначение построения, проверьте это статья, чтобы помочь вам.

Помимо стандарта Импорт matplotlib.pyplot как PLT , вы также должны от mpl_toolkits.mplot3d Import AXES3D Отказ Это импортирует 3D Оси Объект, на котором A) Вы можете с участием 3D-данные и B) вы сделаете все свои вызовы сюжетов в отношении.

Вы настроили свой Рисунок Стандартный путь

fig = plt.figure()

И добавьте подломы на эту цифру, используя стандарт fig.add_subplot () метод. Если вы просто хотите один Оси , пройти 111 Чтобы указать, что это 1 строка, 1 столбец, и вы выбираете 1-й. Тогда вам нужно пройти Проекция = «3D» который говорит Matplotlib это 3D-участк.

Отныне все есть (почти) так же, как 2D построение. Все функции, которые вы знаете и любят, такие как AX.PLOT () и AX.SCatter () Принять одинаковые аргументы ключевых слов Но теперь они также принимают три позиционных аргумента – Х , Y и Z Отказ

В некоторых способах 3D участки более естественны для нас работать с тех пор, как мы живем в трехмерном мире. С другой стороны, они более сложны, так как мы так используются для 2D участков. Одна удивительная особенность ноутбуков Jupyter – это волшебная команда % matplotlib ноутбук Который, если пробежал в верхней части своего ноутбука, рисует все свои участки в интерактивном окне. Вы можете изменить ориентацию, нажав и перетащив (щелкните правой кнопкой мыши и перетащите, чтобы увеличить), которые действительно могут помочь понять ваши данные.

Как это статический пост блога, все мои участки будут статичными Но я призываю вас играть в свой собственный jupyter или iPython Environment.

Связанная статья:

  • Проверьте вашу версию Python в ноутбуке Jupyter.

MATPLOTLIB 3D Правящий график

Вот пример силы 3D линейных участков, использующих всю информацию выше.

# Standard imports
import matplotlib.pyplot as plt
import numpy as np

# Import 3D Axes 
from mpl_toolkits.mplot3d import axes3d

# Set up Figure and 3D Axes 
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Create space of numbers for cos and sin to be applied to
theta = np.linspace(-12, 12, 200)
x = np.sin(theta)
y = np.cos(theta)

# Create z space the same size as theta 
z = np.linspace(-2, 2, 200)

ax.plot(x, y, z)
plt.show()

Чтобы избежать повторения, я не буду объяснять точки, которые я уже сделал выше о импорте и настройке Рисунок и Оси объекты.

Я создал переменную Тета Использование np.linspace Что возвращает массив 200 чисел между -12 и 12, которые одинаково расположены I.E. Есть линейное расстояние между ними все. Я передал это на np.sin () и np.cos () и сохранил их в переменных x и уход .

Если вы просто построены х и уход Теперь вы получите круг. Чтобы получить движение вверх/вниз, вам нужно изменить ось Z. Итак, я использовал np.linspace Опять же, чтобы создать список 200 чисел одинаково расположенных между -2 и 2, которые можно увидеть, глядя на ось Z (вертикальный).

Примечание. Если вы выбираете меньшее количество значений для np.linspace Участок не так гладко.

Для этого сюжета я установил третий аргумент np.linspace до 25 вместо 200. Очевидно, что этот участок гораздо менее гладкий, чем оригинал, и, надеюсь, дает вам понимание того, что происходит под капотом с этими участками. 3D участки могут поначалу казаться пугающими, поэтому мой лучший совет должен пройти через строку кода по линии.

MATPLOTLIB 3D сюжет разброс

Создание графика разброса точно такой же, как сделать линий сюжет, но вы звоните AX.SCatter вместо.

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

import random
random.seed(1)

# Create 3 samples from normal distribution with mean and standard deviation of 1
x = [random.normalvariate(1, 1) for _ in range(400)]
y = [random.normalvariate(1, 1) for _ in range(400)]
z = [random.normalvariate(1, 1) for _ in range(400)]

# Set up Figure and Axes
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Plot
ax.scatter(x, y, z)
plt.show()

Во-первых, я импортировал Python Случайный модуль И установите семена, чтобы вы могли воспроизвести мои результаты. Далее я использовал три понятия для создания 3 × 400 образцов нормального распределения с использованием Random.normalVariate () функция. Тогда я настроил Рисунок и Оси как обычно и сделал мой участок, позвонив AX.SCatter () Отказ

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X, Y, Z)
plt.show()

В этом примере я нанесен тот же X , Y и Z списки как в самом первом примере. Я хочу подчеркнуть вам, что некоторые из точек темнее, а некоторые более прозрачные – это указывает на глубину. Те, которые более темные в цвете, на переднем плане, а те, кто возвращается снова.

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

MATPLOTLIB 3D График вращается

Самый простой способ вращать 3D-участки – это отображать их в интерактивном окне, используя команду Jupyter Magic Magic % matplotlib ноутбук Или использовать iPython (который всегда отображает графики в интерактивных окнах). Это позволяет вручную вращать их, щелкнув и перетаскивая. Если вы щелкните правой кнопкой мыши и переместите мышь, вы будете увеличить и выходить из сюжета. Чтобы сохранить статическую версию сюжета, нажмите значок Сохранить.

Можно вращать графики и даже создавать анимацию через код, но выходит из объема этой статьи.

MATPLOTLIB 3D сюжет оси этикетки

Установка меток оси для трехмерных участков идентична для 2D заговоров, за исключением которых сейчас есть третий ось – ось Z – вы можете метить.

У вас есть 2 варианта:

  1. Используйте AX.SET_XLABEL () , AX.SET_YLABEL () и AX.SET_ZLABEL () Методы или
  2. Используйте AX.SET () Способ и пропустите аргументы ключевых слов xlabel , YLABEL и Zlabel Отказ

Вот пример, используя первый метод.

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X, Y, Z)

# Method 1
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')

plt.show()

Теперь каждая ось помечена как ожидалось.

Вы можете заметить, что этикетки оси не особенно видны, используя настройки по умолчанию. Вы можете решить это, вручную увеличив размер Рисунок с фигес Аргумент в вашем PLT.Figure () вызов.

Одна вещь, которую мне не нравится в методе 1, заключается в том, что он занимает 3 строки кода, и они скучно, чтобы ввести. Итак, я предпочитаю метод 2.

# Set Figure to be 8 inches wide and 6 inches tall
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X, Y, Z)

# Method 2 - set all labels in one line of code!
ax.set(xlabel='X axis', ylabel='Y axis', zlabel='Z axis')

plt.show()

Намного лучше! Во-первых, потому что вы увеличили размер Рисунок Все этикетки оси хорошо видны. Плюс, он достал вам только одну линию кода, чтобы пометить их всех. В общем, если вы когда-нибудь используете AX.SET_ <Что-то> () Способ в Matplotlib, его можно записать как AX.SET (<что-то> =) вместо. Это сохраняет вам пространство и приятнее ввести, особенно если вы хотите сделать многочисленные модификации на график, такие как также добавление заголовка.

MATPLOTLIB 3D График легенды

Вы добавляете легенды в 3D графики точно так же, как вы добавляете Легенды к любым другим участкам. Используйте этикетка Аргумент ключевых слов, а затем звоните AX.LEGEND () в конце.

import random

random.seed(1)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Plot and label original data
ax.scatter(X, Y, Z, label='First Plot')

# Randomly re-order the data
for data in [X, Y, Z]:
    random.shuffle(data)

# Plot and label re-ordered data
ax.scatter(X, Y, Z, label='Second Plot')

ax.legend(loc='upper left')
plt.show()

В этом примере я впервые установил случайное семена на 1, чтобы вы могли воспроизвести те же результаты, что и я. Я настроил Рисунок и Оси Как и ожидалось, сделал мой первый трехмерный участок, используя X , Y и Z и пометил это с метка Аргумент ключевых слов и соответствующая строка.

Чтобы спасти меня из вручную, создавая совершенно новый набор данных, я думал, что было бы хорошей идеей, чтобы использовать данные, которые у меня уже имели. Итак, я применил Random.shuffle () Функция для каждого из X , Y и Z которые смешивают значения списков на месте. Итак, позвонив AX.PLOT () Второй раз, нанесенный теми же номерами, но в другом порядке, таким образом, создавая другой сюжет. Наконец, я пометил второй сюжет и называл AX.LEGEND (LOC = «ВНЕШНИЙ ЛВОЛ») отображать легенду в верхнем левом углу сюжета.

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

Примечание. Если вы снова запустите вышеуказанный код, вы получите другой сюжет. Это потому, что вы начнете с перетасовки X , Y и Z списки, а не оригиналы, которые вы создали дальше в посте.

MATPLOTLIB 3D График Цвет фона

Есть два фона, которые вы можете изменить в MatPlotlib – Рисунок и Оси фон. Оба могут быть установлены, используя либо .set_faceColor («цвет») или .et (FaceColor = 'Color') методы. Надеюсь, вы знаете, что теперь я предпочитаю второй метод в течение первого!

Вот пример, где я установил Рисунок Цвет фона до зеленого и Оси Цвет фона до красного.

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
ax.plot(X, Y, Z)

# Axes color is red
ax.set(facecolor='r')
# Figure color is green
fig.set(facecolor='g')
plt.show()

Первые три строки такие же, как простая строка. Тогда я позвонил AX.SET (FACECOLOR = 'R') Чтобы установить Оси Цвет к красному и fig.set (faceColor = 'g') Чтобы установить Рисунок Цвет зеленого.

В примере с одним Оси это выглядит немного странно, чтобы установить Рисунок а также Оси Цвета отдельно. Если у вас есть более одного Оси Объект, это выглядит намного лучше.

# Set up Figure and Axes in one function call
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 6), 
                         subplot_kw=dict(projection='3d'))

colors = ['r', 'g', 'y', 'b']

# iterate over colors and all Axes objects
for c, ax in zip(colors, axes.flat):
    ax.plot(X, Y, Z)
    # Set Axes color
    ax.set(facecolor=c)

# Set Figure color
fig.set(facecolor='pink')
plt.show()

В этом примере я использовал plt.subplots () Чтобы настроить 8 × 6 дюймов Рисунок содержащий четыре 3D Оси Объекты в сетке 2 × 2. subplot_kw Аргумент принимает словарь значений, и их передаются на add_subplot . сделать каждый Оси объект. Для получения дополнительной информации об использовании plt.subplots () проверить Моя статья Отказ

Тогда я создал список Цвета содержащий 4 цветных струн MATPLOTLIB. После этого я использовал цикл для петли, чтобы повторять Цвета и AXES.FLAT Отказ Для того, чтобы повторять над Цвета и оси Вместе они должны быть одинаковыми формой. Есть несколько способов сделать это, но используя .flat Атрибут хорошо работает в этом случае.

Наконец, я сделал тот же сюжет на каждом Оси и установить емкости. Теперь ясно, почему установить Рисунок Цвет может быть более полезен, если вы создаете подломы – есть больше места для цвета, чтобы сиять.

Заключение

Вот и все, теперь вы знаете основы создания трехмерных участков в Matplotlib!

Вы узнали необходимый импорт, необходимый, а также как настроить свой Рисунок и Оси объекты должны быть 3D. Вы посмотрели на примеры линейных и разбросных участков. Кроме того, вы можете изменить их, вращая их, добавляя этикетки оси, добавляя легенды и изменяя цвет фона.

Еще больше нужно узнать о трехмерных участках, таких как поверхностные участки, каркасные участки, анимируют их и изменяют соотношение сторон.

Если вы хотите освоить все о 3D участках, проверьте часть 2 этой статьи.

Куда пойти отсюда?

Вы хотите, чтобы вы могли быть программистом на полный рабочий день, но не знаете, как начать?

Ознакомьтесь с чистым упаковочным величином, где Chris – Creator of Finxter.com – учит вас стать фрилансером Python в 60 дней или вернуть деньги!

https://tinyurl.com/become-a-python-freelancer

Неважно, если вы начинаете питон или Python Pro. Если вы не делаете шесть фигур/год с Python прямо сейчас, вы узнаете что-то из этого вебинара.

Это доказаны, методы NO-BS, которые получают ваши результаты быстро.

Этот вебинар не будет онлайн навсегда. Нажмите на ссылку ниже, прежде чем сиденья наполнится и научитесь стать фрилансером Python, гарантированно.

https://tinyurl.com/become-a-python-freelancer

Expert Writer & Content Creator – наука о науке и машине. – Я помогаю образовательным компаниям создавать привлечение в блоге и видеоконтентах преподавания данных науки для начинающих. В отличие от моих конкурентов, я узнаю новые концепции каждый день и так понимаю, что это нравится быть студентом. Мои статьи легко понять, эффективны и приятно читать. Мои видео достойны, участвуют и подробно. – Работать со мной, пожалуйста, обратитесь к Upwork https://tinyurl.com/hire-adam-murphy

Оригинал: “https://blog.finxter.com/matplotlib-3d-plot/”